Describe themes.vim
  After each
    highlight clear Foo
    highlight clear Normal
  End

  It should extract correct colors with No termguicolors
    if !exists("+termguicolors")
      call airline#highlighter#reset_hlcache()
      highlight Foo ctermfg=1 ctermbg=2
      let colors = airline#themes#get_highlight('Foo')
      Assert Equals(colors[0], 'NONE')
      Assert Equals(colors[1], 'NONE')
      Assert Equals(colors[2], '1')
      Assert Equals(colors[3], '2')
    endif
  End

  if exists("+termguicolors")
    It should extract correct colors with termguicolors
      call airline#highlighter#reset_hlcache()
      set termguicolors
      highlight Foo guifg=#cd0000 guibg=#00cd00 ctermfg=1 ctermbg=2
      let colors = airline#themes#get_highlight('Foo')
      Assert Equals(colors[0], '#cd0000')
      Assert Equals(colors[1], '#00cd00')
      Assert Equals(colors[2], '1')
      Assert Equals(colors[3], '2')
    End
  endif

  It should extract from normal if colors unavailable
    call airline#highlighter#reset_hlcache()
    highlight Normal ctermfg=100 ctermbg=200
    highlight Foo ctermbg=2
    let colors = airline#themes#get_highlight('Foo')
    Assert Equals(colors[0], 'NONE')
    Assert Equals(colors[1], 'NONE')
    Assert Equals(colors[2], '100')
    Assert Equals(colors[3], '2')
  End

  It should flip target group if It is reversed
    call airline#highlighter#reset_hlcache()
    highlight Foo ctermbg=222 ctermfg=103 cterm=reverse
    let colors = airline#themes#get_highlight('Foo')
    Assert Equals(colors[0], 'NONE')
    Assert Equals(colors[1], 'NONE')
    Assert Equals(colors[2], '222')
    Assert Equals(colors[3], '103')
  End

  It should pass args through correctly
    call airline#highlighter#reset_hlcache()
    hi clear Normal
    let hl = airline#themes#get_highlight('Foo', 'bold', 'italic')
    Assert Equals(hl, ['NONE', 'NONE', 'NONE', 'NONE', 'bold,italic'])

    let hl = airline#themes#get_highlight2(['Foo','bg'], ['Foo','fg'], 'italic', 'bold')
    Assert Equals(hl, ['NONE', 'NONE', 'NONE', 'NONE', 'italic,bold'])
  End

  It should generate color map with mirroring
    let map = airline#themes#generate_color_map(
          \ [ 1, 1, 1, 1, '1' ],
          \ [ 2, 2, 2, 2, '2' ],
          \ [ 3, 3, 3, 3, '3' ],
          \ )
    Assert Equals(map.airline_a[0], 1)
    Assert Equals(map.airline_b[0], 2)
    Assert Equals(map.airline_c[0], 3)
    Assert Equals(map.airline_x[0], 3)
    Assert Equals(map.airline_y[0], 2)
    Assert Equals(map.airline_z[0], 1)
  End

  It should generate color map with full set of colors
    let map = airline#themes#generate_color_map(
          \ [ 1, 1, 1, 1, '1' ],
          \ [ 2, 2, 2, 2, '2' ],
          \ [ 3, 3, 3, 3, '3' ],
          \ [ 4, 4, 4, 4, '4' ],
          \ [ 5, 5, 5, 5, '5' ],
          \ [ 6, 6, 6, 6, '6' ],
          \ )
    Assert Equals(map.airline_a[0], 1)
    Assert Equals(map.airline_b[0], 2)
    Assert Equals(map.airline_c[0], 3)
    Assert Equals(map.airline_x[0], 4)
    Assert Equals(map.airline_y[0], 5)
    Assert Equals(map.airline_z[0], 6)
  End
End
