10aa398f5SBram Moolenaar" Tests for ":highlight" and highlighting.
20aa398f5SBram Moolenaar
30aa398f5SBram Moolenaarsource view_util.vim
4c07ff5c6SBram Moolenaarsource screendump.vim
58c5a278fSBram Moolenaarsource check.vim
6e8df0104SBram Moolenaarsource script_util.vim
7d1a8d658SYegappan Lakshmanansource vim9.vim
80aa398f5SBram Moolenaar
9a0fca172SDrew Vogelfunc ClearDict(d)
10a0fca172SDrew Vogel  for k in keys(a:d)
11a0fca172SDrew Vogel    call remove(a:d, k)
12a0fca172SDrew Vogel  endfor
13a0fca172SDrew Vogelendfunc
14a0fca172SDrew Vogel
1575373f38SBram Moolenaarfunc Test_highlight()
1675373f38SBram Moolenaar  " basic test if ":highlight" doesn't crash
1775373f38SBram Moolenaar  highlight
1875373f38SBram Moolenaar  hi Search
1975373f38SBram Moolenaar
2075373f38SBram Moolenaar  " test setting colors.
2175373f38SBram Moolenaar  " test clearing one color and all doesn't generate error or warning
2275373f38SBram Moolenaar  silent! hi NewGroup term=bold cterm=italic ctermfg=DarkBlue ctermbg=Grey gui= guifg=#00ff00 guibg=Cyan
2375373f38SBram Moolenaar  silent! hi Group2 term= cterm=
2475373f38SBram Moolenaar  hi Group3 term=underline cterm=bold
2575373f38SBram Moolenaar
2675373f38SBram Moolenaar  let res = split(execute("hi NewGroup"), "\n")[0]
2775373f38SBram Moolenaar  " filter ctermfg and ctermbg, the numbers depend on the terminal
2875373f38SBram Moolenaar  let res = substitute(res, 'ctermfg=\d*', 'ctermfg=2', '')
2975373f38SBram Moolenaar  let res = substitute(res, 'ctermbg=\d*', 'ctermbg=3', '')
3075373f38SBram Moolenaar  call assert_equal("NewGroup       xxx term=bold cterm=italic ctermfg=2 ctermbg=3",
3175373f38SBram Moolenaar				\ res)
3275373f38SBram Moolenaar  call assert_equal("Group2         xxx cleared",
3375373f38SBram Moolenaar				\ split(execute("hi Group2"), "\n")[0])
3475373f38SBram Moolenaar  call assert_equal("Group3         xxx term=underline cterm=bold",
3575373f38SBram Moolenaar				\ split(execute("hi Group3"), "\n")[0])
3675373f38SBram Moolenaar
3775373f38SBram Moolenaar  hi clear NewGroup
3875373f38SBram Moolenaar  call assert_equal("NewGroup       xxx cleared",
3975373f38SBram Moolenaar				\ split(execute("hi NewGroup"), "\n")[0])
4075373f38SBram Moolenaar  call assert_equal("Group2         xxx cleared",
4175373f38SBram Moolenaar				\ split(execute("hi Group2"), "\n")[0])
4275373f38SBram Moolenaar  hi Group2 NONE
4375373f38SBram Moolenaar  call assert_equal("Group2         xxx cleared",
4475373f38SBram Moolenaar				\ split(execute("hi Group2"), "\n")[0])
4575373f38SBram Moolenaar  hi clear
4675373f38SBram Moolenaar  call assert_equal("Group3         xxx cleared",
4775373f38SBram Moolenaar				\ split(execute("hi Group3"), "\n")[0])
4875373f38SBram Moolenaar  call assert_fails("hi Crash term='asdf", "E475:")
4975373f38SBram Moolenaarendfunc
500aa398f5SBram Moolenaar
511e115360SBram Moolenaarfunc HighlightArgs(name)
520aa398f5SBram Moolenaar  return 'hi ' . substitute(split(execute('hi ' . a:name), '\n')[0], '\<xxx\>', '', '')
531e115360SBram Moolenaarendfunc
540aa398f5SBram Moolenaar
551e115360SBram Moolenaarfunc IsColorable()
560aa398f5SBram Moolenaar  return has('gui_running') || str2nr(&t_Co) >= 8
571e115360SBram Moolenaarendfunc
580aa398f5SBram Moolenaar
591e115360SBram Moolenaarfunc HiCursorLine()
600aa398f5SBram Moolenaar  let hiCursorLine = HighlightArgs('CursorLine')
610aa398f5SBram Moolenaar  if has('gui_running')
620aa398f5SBram Moolenaar    let guibg = matchstr(hiCursorLine, 'guibg=\w\+')
630aa398f5SBram Moolenaar    let hi_ul = 'hi CursorLine gui=underline guibg=NONE'
640aa398f5SBram Moolenaar    let hi_bg = 'hi CursorLine gui=NONE ' . guibg
650aa398f5SBram Moolenaar  else
660aa398f5SBram Moolenaar    let hi_ul = 'hi CursorLine cterm=underline ctermbg=NONE'
670aa398f5SBram Moolenaar    let hi_bg = 'hi CursorLine cterm=NONE ctermbg=Gray'
680aa398f5SBram Moolenaar  endif
690aa398f5SBram Moolenaar  return [hiCursorLine, hi_ul, hi_bg]
701e115360SBram Moolenaarendfunc
710aa398f5SBram Moolenaar
721e115360SBram Moolenaarfunc Check_lcs_eol_attrs(attrs, row, col)
735ece3e35SBram Moolenaar  let save_lcs = &lcs
745ece3e35SBram Moolenaar  set list
755ece3e35SBram Moolenaar
765ece3e35SBram Moolenaar  call assert_equal(a:attrs, ScreenAttrs(a:row, a:col)[0])
775ece3e35SBram Moolenaar
785ece3e35SBram Moolenaar  set nolist
795ece3e35SBram Moolenaar  let &lcs = save_lcs
801e115360SBram Moolenaarendfunc
815ece3e35SBram Moolenaar
820aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline()
830aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
840aa398f5SBram Moolenaar
850aa398f5SBram Moolenaar  call NewWindow('topleft 5', 20)
860aa398f5SBram Moolenaar  call setline(1, 'abcd')
870aa398f5SBram Moolenaar  call matchadd('Search', '\n')
880aa398f5SBram Moolenaar
890aa398f5SBram Moolenaar  " expected:
900aa398f5SBram Moolenaar  " 'abcd      '
910aa398f5SBram Moolenaar  "  ^^^^ ^^^^^   no highlight
920aa398f5SBram Moolenaar  "      ^        'Search' highlight
930aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 10)[0]
940aa398f5SBram Moolenaar  call assert_equal(repeat([attrs0[0]], 4), attrs0[0:3])
950aa398f5SBram Moolenaar  call assert_equal(repeat([attrs0[0]], 5), attrs0[5:9])
960aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs0[4])
970aa398f5SBram Moolenaar
980aa398f5SBram Moolenaar  setlocal cursorline
990aa398f5SBram Moolenaar
1000aa398f5SBram Moolenaar  " underline
1010aa398f5SBram Moolenaar  exe hi_ul
1020aa398f5SBram Moolenaar
1030aa398f5SBram Moolenaar  " expected:
1040aa398f5SBram Moolenaar  " 'abcd      '
1050aa398f5SBram Moolenaar  "  ^^^^         underline
1065ece3e35SBram Moolenaar  "      ^        'Search' highlight with underline
1075ece3e35SBram Moolenaar  "       ^^^^^   underline
1080aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 10)[0]
1090aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
1100aa398f5SBram Moolenaar  call assert_equal([attrs[4]] + repeat([attrs[5]], 5), attrs[4:9])
1110aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[4])
1120aa398f5SBram Moolenaar  call assert_notequal(attrs[4], attrs[5])
1130aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs[0])
1140aa398f5SBram Moolenaar  call assert_notequal(attrs0[4], attrs[4])
1155ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 10)
1160aa398f5SBram Moolenaar
1170aa398f5SBram Moolenaar  if IsColorable()
1180aa398f5SBram Moolenaar    " bg-color
1190aa398f5SBram Moolenaar    exe hi_bg
1200aa398f5SBram Moolenaar
1210aa398f5SBram Moolenaar    " expected:
1220aa398f5SBram Moolenaar    " 'abcd      '
1230aa398f5SBram Moolenaar    "  ^^^^         bg-color of 'CursorLine'
1240aa398f5SBram Moolenaar    "      ^        'Search' highlight
1250aa398f5SBram Moolenaar    "       ^^^^^   bg-color of 'CursorLine'
1260aa398f5SBram Moolenaar    let attrs = ScreenAttrs(1, 10)[0]
1270aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
1280aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[5]], 5), attrs[5:9])
1290aa398f5SBram Moolenaar    call assert_equal(attrs0[4], attrs[4])
1300aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[4])
1310aa398f5SBram Moolenaar    call assert_notequal(attrs[4], attrs[5])
1320aa398f5SBram Moolenaar    call assert_notequal(attrs0[0], attrs[0])
1330aa398f5SBram Moolenaar    call assert_notequal(attrs0[5], attrs[5])
1345ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 1, 10)
1350aa398f5SBram Moolenaar  endif
1360aa398f5SBram Moolenaar
1370aa398f5SBram Moolenaar  call CloseWindow()
1380aa398f5SBram Moolenaar  exe hiCursorLine
1390aa398f5SBram Moolenaarendfunc
1400aa398f5SBram Moolenaar
1410aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline_vertsplit()
1420aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
1430aa398f5SBram Moolenaar
1440aa398f5SBram Moolenaar  call NewWindow('topleft 5', 5)
1450aa398f5SBram Moolenaar  call setline(1, 'abcd')
1460aa398f5SBram Moolenaar  call matchadd('Search', '\n')
1470aa398f5SBram Moolenaar
1480aa398f5SBram Moolenaar  let expected = "abcd |abcd     "
1490aa398f5SBram Moolenaar  let actual = ScreenLines(1, 15)[0]
1500aa398f5SBram Moolenaar  call assert_equal(expected, actual)
1510aa398f5SBram Moolenaar
1520aa398f5SBram Moolenaar  " expected:
1530aa398f5SBram Moolenaar  " 'abcd |abcd     '
1540aa398f5SBram Moolenaar  "  ^^^^  ^^^^^^^^^   no highlight
1550aa398f5SBram Moolenaar  "      ^             'Search' highlight
1560aa398f5SBram Moolenaar  "       ^            'VertSplit' highlight
1570aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 15)[0]
1580aa398f5SBram Moolenaar  call assert_equal(repeat([attrs0[0]], 4), attrs0[0:3])
1590aa398f5SBram Moolenaar  call assert_equal(repeat([attrs0[0]], 9), attrs0[6:14])
1600aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs0[4])
1610aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs0[5])
1620aa398f5SBram Moolenaar  call assert_notequal(attrs0[4], attrs0[5])
1630aa398f5SBram Moolenaar
1640aa398f5SBram Moolenaar  setlocal cursorline
1650aa398f5SBram Moolenaar
1660aa398f5SBram Moolenaar  " expected:
1670aa398f5SBram Moolenaar  " 'abcd |abcd     '
1680aa398f5SBram Moolenaar  "  ^^^^              underline
1690aa398f5SBram Moolenaar  "      ^             'Search' highlight with underline
1700aa398f5SBram Moolenaar  "       ^            'VertSplit' highlight
1710aa398f5SBram Moolenaar  "        ^^^^^^^^^   no highlight
1720aa398f5SBram Moolenaar
1730aa398f5SBram Moolenaar  " underline
1740aa398f5SBram Moolenaar  exe hi_ul
1750aa398f5SBram Moolenaar
1760aa398f5SBram Moolenaar  let actual = ScreenLines(1, 15)[0]
1770aa398f5SBram Moolenaar  call assert_equal(expected, actual)
1780aa398f5SBram Moolenaar
1790aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 15)[0]
1800aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
1810aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[6]], 9), attrs[6:14])
1820aa398f5SBram Moolenaar  call assert_equal(attrs0[5:14], attrs[5:14])
1830aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[4])
1840aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[5])
1850aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[6])
1860aa398f5SBram Moolenaar  call assert_notequal(attrs[4], attrs[5])
1870aa398f5SBram Moolenaar  call assert_notequal(attrs[5], attrs[6])
1880aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs[0])
1890aa398f5SBram Moolenaar  call assert_notequal(attrs0[4], attrs[4])
1905ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 15)
1910aa398f5SBram Moolenaar
1920aa398f5SBram Moolenaar  if IsColorable()
1930aa398f5SBram Moolenaar    " bg-color
1940aa398f5SBram Moolenaar    exe hi_bg
1950aa398f5SBram Moolenaar
1960aa398f5SBram Moolenaar    let actual = ScreenLines(1, 15)[0]
1970aa398f5SBram Moolenaar    call assert_equal(expected, actual)
1980aa398f5SBram Moolenaar
1990aa398f5SBram Moolenaar    let attrs = ScreenAttrs(1, 15)[0]
2000aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
2010aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[6]], 9), attrs[6:14])
2020aa398f5SBram Moolenaar    call assert_equal(attrs0[5:14], attrs[5:14])
2030aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[4])
2040aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[5])
2050aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[6])
2060aa398f5SBram Moolenaar    call assert_notequal(attrs[4], attrs[5])
2070aa398f5SBram Moolenaar    call assert_notequal(attrs[5], attrs[6])
2080aa398f5SBram Moolenaar    call assert_notequal(attrs0[0], attrs[0])
2090aa398f5SBram Moolenaar    call assert_equal(attrs0[4], attrs[4])
2105ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 1, 15)
2110aa398f5SBram Moolenaar  endif
2120aa398f5SBram Moolenaar
2130aa398f5SBram Moolenaar  call CloseWindow()
2140aa398f5SBram Moolenaar  exe hiCursorLine
2150aa398f5SBram Moolenaarendfunc
2160aa398f5SBram Moolenaar
2170aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline_rightleft()
2186d91bcb4SBram Moolenaar  CheckFeature rightleft
2190aa398f5SBram Moolenaar
2200aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
2210aa398f5SBram Moolenaar
2220aa398f5SBram Moolenaar  call NewWindow('topleft 5', 10)
2230aa398f5SBram Moolenaar  setlocal rightleft
2240aa398f5SBram Moolenaar  call setline(1, 'abcd')
2250aa398f5SBram Moolenaar  call matchadd('Search', '\n')
2260aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 10)[0]
2270aa398f5SBram Moolenaar
2280aa398f5SBram Moolenaar  setlocal cursorline
2290aa398f5SBram Moolenaar
2300aa398f5SBram Moolenaar  " underline
2310aa398f5SBram Moolenaar  exe hi_ul
2320aa398f5SBram Moolenaar
2330aa398f5SBram Moolenaar  " expected:
2340aa398f5SBram Moolenaar  " '      dcba'
2350aa398f5SBram Moolenaar  "        ^^^^   underline
2360aa398f5SBram Moolenaar  "       ^       'Search' highlight with underline
2370aa398f5SBram Moolenaar  "  ^^^^^        underline
2380aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 10)[0]
2390aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[9]], 4), attrs[6:9])
2400aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[4]], 5) + [attrs[5]], attrs[0:5])
2410aa398f5SBram Moolenaar  call assert_notequal(attrs[9], attrs[5])
2420aa398f5SBram Moolenaar  call assert_notequal(attrs[4], attrs[5])
2430aa398f5SBram Moolenaar  call assert_notequal(attrs0[9], attrs[9])
2440aa398f5SBram Moolenaar  call assert_notequal(attrs0[5], attrs[5])
2455ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 10)
2460aa398f5SBram Moolenaar
2470aa398f5SBram Moolenaar  if IsColorable()
2480aa398f5SBram Moolenaar    " bg-color
2490aa398f5SBram Moolenaar    exe hi_bg
2500aa398f5SBram Moolenaar
2510aa398f5SBram Moolenaar    " expected:
2520aa398f5SBram Moolenaar    " '      dcba'
2530aa398f5SBram Moolenaar    "        ^^^^   bg-color of 'CursorLine'
2540aa398f5SBram Moolenaar    "       ^       'Search' highlight
2550aa398f5SBram Moolenaar    "  ^^^^^        bg-color of 'CursorLine'
2560aa398f5SBram Moolenaar    let attrs = ScreenAttrs(1, 10)[0]
2570aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[9]], 4), attrs[6:9])
2580aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[4]], 5), attrs[0:4])
2590aa398f5SBram Moolenaar    call assert_equal(attrs0[5], attrs[5])
2600aa398f5SBram Moolenaar    call assert_notequal(attrs[9], attrs[5])
2610aa398f5SBram Moolenaar    call assert_notequal(attrs[5], attrs[4])
2620aa398f5SBram Moolenaar    call assert_notequal(attrs0[9], attrs[9])
2630aa398f5SBram Moolenaar    call assert_notequal(attrs0[4], attrs[4])
2645ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 1, 10)
2650aa398f5SBram Moolenaar  endif
2660aa398f5SBram Moolenaar
2670aa398f5SBram Moolenaar  call CloseWindow()
2680aa398f5SBram Moolenaar  exe hiCursorLine
2690aa398f5SBram Moolenaarendfunc
2700aa398f5SBram Moolenaar
2710aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline_linewrap()
2720aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
2730aa398f5SBram Moolenaar
2740aa398f5SBram Moolenaar  call NewWindow('topleft 5', 10)
2750aa398f5SBram Moolenaar  call setline(1, [repeat('a', 51) . 'bcd', ''])
2760aa398f5SBram Moolenaar  call matchadd('Search', '\n')
2770aa398f5SBram Moolenaar
2780aa398f5SBram Moolenaar  setlocal wrap
2790aa398f5SBram Moolenaar  normal! gg$
2800aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(5, 10)[0]
2810aa398f5SBram Moolenaar  setlocal cursorline
2820aa398f5SBram Moolenaar
2830aa398f5SBram Moolenaar  " underline
2840aa398f5SBram Moolenaar  exe hi_ul
2850aa398f5SBram Moolenaar
2860aa398f5SBram Moolenaar  " expected:
2870aa398f5SBram Moolenaar  " 'abcd      '
2880aa398f5SBram Moolenaar  "  ^^^^         underline
2890aa398f5SBram Moolenaar  "      ^        'Search' highlight with underline
2900aa398f5SBram Moolenaar  "       ^^^^^   underline
2910aa398f5SBram Moolenaar  let attrs = ScreenAttrs(5, 10)[0]
2920aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
2930aa398f5SBram Moolenaar  call assert_equal([attrs[4]] + repeat([attrs[5]], 5), attrs[4:9])
2940aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[4])
2950aa398f5SBram Moolenaar  call assert_notequal(attrs[4], attrs[5])
2960aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs[0])
2970aa398f5SBram Moolenaar  call assert_notequal(attrs0[4], attrs[4])
2985ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 5, 10)
2990aa398f5SBram Moolenaar
3000aa398f5SBram Moolenaar  if IsColorable()
3010aa398f5SBram Moolenaar    " bg-color
3020aa398f5SBram Moolenaar    exe hi_bg
3030aa398f5SBram Moolenaar
3040aa398f5SBram Moolenaar    " expected:
3050aa398f5SBram Moolenaar    " 'abcd      '
3060aa398f5SBram Moolenaar    "  ^^^^         bg-color of 'CursorLine'
3070aa398f5SBram Moolenaar    "      ^        'Search' highlight
3080aa398f5SBram Moolenaar    "       ^^^^^   bg-color of 'CursorLine'
3090aa398f5SBram Moolenaar    let attrs = ScreenAttrs(5, 10)[0]
3100aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
3110aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[5]], 5), attrs[5:9])
3120aa398f5SBram Moolenaar    call assert_equal(attrs0[4], attrs[4])
3130aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[4])
3140aa398f5SBram Moolenaar    call assert_notequal(attrs[4], attrs[5])
3150aa398f5SBram Moolenaar    call assert_notequal(attrs0[0], attrs[0])
3160aa398f5SBram Moolenaar    call assert_notequal(attrs0[5], attrs[5])
3175ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 5, 10)
3180aa398f5SBram Moolenaar  endif
3190aa398f5SBram Moolenaar
3200aa398f5SBram Moolenaar  setlocal nocursorline nowrap
3210aa398f5SBram Moolenaar  normal! gg$
3220aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 10)[0]
3230aa398f5SBram Moolenaar  setlocal cursorline
3240aa398f5SBram Moolenaar
3250aa398f5SBram Moolenaar  " underline
3260aa398f5SBram Moolenaar  exe hi_ul
3270aa398f5SBram Moolenaar
3280aa398f5SBram Moolenaar  " expected:
3290aa398f5SBram Moolenaar  " 'aaabcd    '
3300aa398f5SBram Moolenaar  "  ^^^^^^       underline
3310aa398f5SBram Moolenaar  "        ^      'Search' highlight with underline
3320aa398f5SBram Moolenaar  "         ^^^   underline
3330aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 10)[0]
3340aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 6), attrs[0:5])
3350aa398f5SBram Moolenaar  call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
3360aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[6])
3370aa398f5SBram Moolenaar  call assert_notequal(attrs[6], attrs[7])
3380aa398f5SBram Moolenaar  call assert_notequal(attrs0[0], attrs[0])
3390aa398f5SBram Moolenaar  call assert_notequal(attrs0[6], attrs[6])
3405ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 10)
3410aa398f5SBram Moolenaar
3420aa398f5SBram Moolenaar  if IsColorable()
3430aa398f5SBram Moolenaar    " bg-color
3440aa398f5SBram Moolenaar    exe hi_bg
3450aa398f5SBram Moolenaar
3460aa398f5SBram Moolenaar    " expected:
3470aa398f5SBram Moolenaar    " 'aaabcd    '
3480aa398f5SBram Moolenaar    "  ^^^^^^       bg-color of 'CursorLine'
3490aa398f5SBram Moolenaar    "        ^      'Search' highlight
3500aa398f5SBram Moolenaar    "         ^^^   bg-color of 'CursorLine'
3510aa398f5SBram Moolenaar    let attrs = ScreenAttrs(1, 10)[0]
3520aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[0]], 6), attrs[0:5])
3530aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
3540aa398f5SBram Moolenaar    call assert_equal(attrs0[6], attrs[6])
3550aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[6])
3560aa398f5SBram Moolenaar    call assert_notequal(attrs[6], attrs[7])
3570aa398f5SBram Moolenaar    call assert_notequal(attrs0[0], attrs[0])
3580aa398f5SBram Moolenaar    call assert_notequal(attrs0[7], attrs[7])
3595ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 1, 10)
3600aa398f5SBram Moolenaar  endif
3610aa398f5SBram Moolenaar
3620aa398f5SBram Moolenaar  call CloseWindow()
3630aa398f5SBram Moolenaar  exe hiCursorLine
3640aa398f5SBram Moolenaarendfunc
3650aa398f5SBram Moolenaar
3660aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline_sign()
3676d91bcb4SBram Moolenaar  CheckFeature signs
3680aa398f5SBram Moolenaar
3690aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
3700aa398f5SBram Moolenaar
3710aa398f5SBram Moolenaar  call NewWindow('topleft 5', 10)
3720aa398f5SBram Moolenaar  call setline(1, 'abcd')
3730aa398f5SBram Moolenaar  call matchadd('Search', '\n')
3740aa398f5SBram Moolenaar
3750aa398f5SBram Moolenaar  sign define Sign text=>>
3760aa398f5SBram Moolenaar  exe 'sign place 1 line=1 name=Sign buffer=' . bufnr('')
3770aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 10)[0]
3780aa398f5SBram Moolenaar  setlocal cursorline
3790aa398f5SBram Moolenaar
3800aa398f5SBram Moolenaar  " underline
3810aa398f5SBram Moolenaar  exe hi_ul
3820aa398f5SBram Moolenaar
3830aa398f5SBram Moolenaar  " expected:
3840aa398f5SBram Moolenaar  " '>>abcd    '
3850aa398f5SBram Moolenaar  "  ^^           sign
3860aa398f5SBram Moolenaar  "    ^^^^       underline
3870aa398f5SBram Moolenaar  "        ^      'Search' highlight with underline
3880aa398f5SBram Moolenaar  "         ^^^   underline
3890aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 10)[0]
3900aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
3910aa398f5SBram Moolenaar  call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
3920aa398f5SBram Moolenaar  call assert_notequal(attrs[2], attrs[6])
3930aa398f5SBram Moolenaar  call assert_notequal(attrs[6], attrs[7])
3940aa398f5SBram Moolenaar  call assert_notequal(attrs0[2], attrs[2])
3950aa398f5SBram Moolenaar  call assert_notequal(attrs0[6], attrs[6])
3965ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 10)
3970aa398f5SBram Moolenaar
3980aa398f5SBram Moolenaar  if IsColorable()
3990aa398f5SBram Moolenaar    " bg-color
4000aa398f5SBram Moolenaar    exe hi_bg
4010aa398f5SBram Moolenaar
4020aa398f5SBram Moolenaar    " expected:
4030aa398f5SBram Moolenaar    " '>>abcd    '
4040aa398f5SBram Moolenaar    "  ^^           sign
4050aa398f5SBram Moolenaar    "    ^^^^       bg-color of 'CursorLine'
4060aa398f5SBram Moolenaar    "        ^      'Search' highlight
4070aa398f5SBram Moolenaar    "         ^^^   bg-color of 'CursorLine'
4080aa398f5SBram Moolenaar    let attrs = ScreenAttrs(1, 10)[0]
4090aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
4100aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
4110aa398f5SBram Moolenaar    call assert_equal(attrs0[6], attrs[6])
4120aa398f5SBram Moolenaar    call assert_notequal(attrs[2], attrs[6])
4130aa398f5SBram Moolenaar    call assert_notequal(attrs[6], attrs[7])
4140aa398f5SBram Moolenaar    call assert_notequal(attrs0[2], attrs[2])
4150aa398f5SBram Moolenaar    call assert_notequal(attrs0[7], attrs[7])
4165ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 1, 10)
4170aa398f5SBram Moolenaar  endif
4180aa398f5SBram Moolenaar
4190aa398f5SBram Moolenaar  sign unplace 1
4200aa398f5SBram Moolenaar  call CloseWindow()
4210aa398f5SBram Moolenaar  exe hiCursorLine
4220aa398f5SBram Moolenaarendfunc
4230aa398f5SBram Moolenaar
4240aa398f5SBram Moolenaarfunc Test_highlight_eol_with_cursorline_breakindent()
4256d91bcb4SBram Moolenaar  CheckFeature linebreak
4260aa398f5SBram Moolenaar
4270aa398f5SBram Moolenaar  let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
4280aa398f5SBram Moolenaar
4290aa398f5SBram Moolenaar  call NewWindow('topleft 5', 10)
430ee85702cSBram Moolenaar  set showbreak=xxx
4310aa398f5SBram Moolenaar  setlocal breakindent breakindentopt=min:0,shift:1 showbreak=>
4320aa398f5SBram Moolenaar  call setline(1, ' ' . repeat('a', 9) . 'bcd')
4330aa398f5SBram Moolenaar  call matchadd('Search', '\n')
4340aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(2, 10)[0]
4350aa398f5SBram Moolenaar  setlocal cursorline
4360aa398f5SBram Moolenaar
4370aa398f5SBram Moolenaar  " underline
4380aa398f5SBram Moolenaar  exe hi_ul
4390aa398f5SBram Moolenaar
4400aa398f5SBram Moolenaar  " expected:
4410aa398f5SBram Moolenaar  " '  >bcd    '
4420aa398f5SBram Moolenaar  "  ^^^          breakindent and showbreak
4430aa398f5SBram Moolenaar  "     ^^^       underline
4440aa398f5SBram Moolenaar  "        ^      'Search' highlight with underline
4450aa398f5SBram Moolenaar  "         ^^^   underline
4460aa398f5SBram Moolenaar  let attrs = ScreenAttrs(2, 10)[0]
4470aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
4480aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[3]], 3), attrs[3:5])
4490aa398f5SBram Moolenaar  call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
4500aa398f5SBram Moolenaar  call assert_equal(attrs0[0], attrs[0])
4510aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[2])
4520aa398f5SBram Moolenaar  call assert_notequal(attrs[2], attrs[3])
4530aa398f5SBram Moolenaar  call assert_notequal(attrs[3], attrs[6])
4540aa398f5SBram Moolenaar  call assert_notequal(attrs[6], attrs[7])
4550aa398f5SBram Moolenaar  call assert_notequal(attrs0[2], attrs[2])
4560aa398f5SBram Moolenaar  call assert_notequal(attrs0[3], attrs[3])
4570aa398f5SBram Moolenaar  call assert_notequal(attrs0[6], attrs[6])
4585ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 2, 10)
4590aa398f5SBram Moolenaar
4600aa398f5SBram Moolenaar  if IsColorable()
4610aa398f5SBram Moolenaar    " bg-color
4620aa398f5SBram Moolenaar    exe hi_bg
4630aa398f5SBram Moolenaar
4640aa398f5SBram Moolenaar    " expected:
4650aa398f5SBram Moolenaar    " '  >bcd    '
4660aa398f5SBram Moolenaar    "  ^^^          breakindent and showbreak
4670aa398f5SBram Moolenaar    "     ^^^       bg-color of 'CursorLine'
4680aa398f5SBram Moolenaar    "        ^      'Search' highlight
4690aa398f5SBram Moolenaar    "         ^^^   bg-color of 'CursorLine'
4700aa398f5SBram Moolenaar    let attrs = ScreenAttrs(2, 10)[0]
4710aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
4720aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[3]], 3), attrs[3:5])
4730aa398f5SBram Moolenaar    call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
4740aa398f5SBram Moolenaar    call assert_equal(attrs0[0], attrs[0])
4750aa398f5SBram Moolenaar    call assert_equal(attrs0[6], attrs[6])
4760aa398f5SBram Moolenaar    call assert_notequal(attrs[0], attrs[2])
4770aa398f5SBram Moolenaar    call assert_notequal(attrs[2], attrs[3])
4780aa398f5SBram Moolenaar    call assert_notequal(attrs[3], attrs[6])
4790aa398f5SBram Moolenaar    call assert_notequal(attrs[6], attrs[7])
4800aa398f5SBram Moolenaar    call assert_notequal(attrs0[2], attrs[2])
4810aa398f5SBram Moolenaar    call assert_notequal(attrs0[3], attrs[3])
4820aa398f5SBram Moolenaar    call assert_notequal(attrs0[7], attrs[7])
4835ece3e35SBram Moolenaar    call Check_lcs_eol_attrs(attrs, 2, 10)
4840aa398f5SBram Moolenaar  endif
4850aa398f5SBram Moolenaar
4860aa398f5SBram Moolenaar  call CloseWindow()
4870aa398f5SBram Moolenaar  set showbreak=
488ee85702cSBram Moolenaar  setlocal showbreak=
4890aa398f5SBram Moolenaar  exe hiCursorLine
4900aa398f5SBram Moolenaarendfunc
4910aa398f5SBram Moolenaar
4920aa398f5SBram Moolenaarfunc Test_highlight_eol_on_diff()
4930aa398f5SBram Moolenaar  call setline(1, ['abcd', ''])
4940aa398f5SBram Moolenaar  call matchadd('Search', '\n')
4950aa398f5SBram Moolenaar  let attrs0 = ScreenAttrs(1, 10)[0]
4960aa398f5SBram Moolenaar
4970aa398f5SBram Moolenaar  diffthis
4980aa398f5SBram Moolenaar  botright new
4990aa398f5SBram Moolenaar  diffthis
5000aa398f5SBram Moolenaar
5010aa398f5SBram Moolenaar  " expected:
5020aa398f5SBram Moolenaar  " '  abcd    '
5030aa398f5SBram Moolenaar  "  ^^           sign
5040aa398f5SBram Moolenaar  "    ^^^^ ^^^   'DiffAdd' highlight
5050aa398f5SBram Moolenaar  "        ^      'Search' highlight
5060aa398f5SBram Moolenaar  let attrs = ScreenAttrs(1, 10)[0]
5070aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
5080aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
5090aa398f5SBram Moolenaar  call assert_equal(repeat([attrs[2]], 3), attrs[7:9])
5100aa398f5SBram Moolenaar  call assert_equal(attrs0[4], attrs[6])
5110aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[2])
5120aa398f5SBram Moolenaar  call assert_notequal(attrs[0], attrs[6])
5130aa398f5SBram Moolenaar  call assert_notequal(attrs[2], attrs[6])
5145ece3e35SBram Moolenaar  call Check_lcs_eol_attrs(attrs, 1, 10)
5150aa398f5SBram Moolenaar
5160aa398f5SBram Moolenaar  bwipe!
5170aa398f5SBram Moolenaar  diffoff
5180aa398f5SBram Moolenaarendfunc
519f708ac59SBram Moolenaar
520f708ac59SBram Moolenaarfunc Test_termguicolors()
5216d91bcb4SBram Moolenaar  CheckOption termguicolors
522310c32e8SBram Moolenaar  if has('vtp') && !has('vcon') && !has('gui_running')
523ff1e8795SBram Moolenaar    " Win32: 'guicolors' doesn't work without virtual console.
524ff1e8795SBram Moolenaar    call assert_fails('set termguicolors', 'E954:')
525ff1e8795SBram Moolenaar    return
526ff1e8795SBram Moolenaar  endif
527f708ac59SBram Moolenaar
528f708ac59SBram Moolenaar  " Basic test that setting 'termguicolors' works with one color.
529f708ac59SBram Moolenaar  set termguicolors
530f708ac59SBram Moolenaar  redraw
531f708ac59SBram Moolenaar  set t_Co=1
532f708ac59SBram Moolenaar  redraw
533f708ac59SBram Moolenaar  set t_Co=0
534f708ac59SBram Moolenaar  redraw
535f708ac59SBram Moolenaarendfunc
536c07ff5c6SBram Moolenaar
537c07ff5c6SBram Moolenaarfunc Test_cursorline_after_yank()
5388c5a278fSBram Moolenaar  CheckScreendump
539c07ff5c6SBram Moolenaar
540c07ff5c6SBram Moolenaar  call writefile([
541c07ff5c6SBram Moolenaar	\ 'set cul rnu',
542c07ff5c6SBram Moolenaar	\ 'call setline(1, ["","1","2","3",""])',
543c07ff5c6SBram Moolenaar	\ ], 'Xtest_cursorline_yank')
544c07ff5c6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_cursorline_yank', {'rows': 8})
5456a2c5a7dSBram Moolenaar  call TermWait(buf)
546c07ff5c6SBram Moolenaar  call term_sendkeys(buf, "Gy3k")
5476a2c5a7dSBram Moolenaar  call TermWait(buf)
548c07ff5c6SBram Moolenaar  call term_sendkeys(buf, "jj")
549c07ff5c6SBram Moolenaar
550c07ff5c6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_cursorline_yank_01', {})
551c07ff5c6SBram Moolenaar
552c07ff5c6SBram Moolenaar  " clean up
553c07ff5c6SBram Moolenaar  call StopVimInTerminal(buf)
554c07ff5c6SBram Moolenaar  call delete('Xtest_cursorline_yank')
555c07ff5c6SBram Moolenaarendfunc
5568156ed37SBram Moolenaar
557fca068b9SBram Moolenaar" test for issue #4862
558fca068b9SBram Moolenaarfunc Test_put_before_cursorline()
559fca068b9SBram Moolenaar  new
560fca068b9SBram Moolenaar  only!
561fca068b9SBram Moolenaar  call setline(1, 'A')
562fca068b9SBram Moolenaar  redraw
563fca068b9SBram Moolenaar  let std_attr = screenattr(1, 1)
564fca068b9SBram Moolenaar  set cursorline
565fca068b9SBram Moolenaar  redraw
566fca068b9SBram Moolenaar  let cul_attr = screenattr(1, 1)
567fca068b9SBram Moolenaar  normal yyP
568fca068b9SBram Moolenaar  redraw
569fca068b9SBram Moolenaar  " Line 1 has cursor so it should be highlighted with CursorLine.
570fca068b9SBram Moolenaar  call assert_equal(cul_attr, screenattr(1, 1))
571fca068b9SBram Moolenaar  " And CursorLine highlighting from the second line should be gone.
572fca068b9SBram Moolenaar  call assert_equal(std_attr, screenattr(2, 1))
573fca068b9SBram Moolenaar  set nocursorline
574fca068b9SBram Moolenaar  bwipe!
575fca068b9SBram Moolenaarendfunc
576fca068b9SBram Moolenaar
5778156ed37SBram Moolenaarfunc Test_cursorline_with_visualmode()
5788c5a278fSBram Moolenaar  CheckScreendump
5798156ed37SBram Moolenaar
5808156ed37SBram Moolenaar  call writefile([
5818156ed37SBram Moolenaar	\ 'set cul',
5828156ed37SBram Moolenaar	\ 'call setline(1, repeat(["abc"], 50))',
5838156ed37SBram Moolenaar	\ ], 'Xtest_cursorline_with_visualmode')
5848156ed37SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_cursorline_with_visualmode', {'rows': 12})
5856a2c5a7dSBram Moolenaar  call TermWait(buf)
5868156ed37SBram Moolenaar  call term_sendkeys(buf, "V\<C-f>kkkjk")
5878156ed37SBram Moolenaar
5888156ed37SBram Moolenaar  call VerifyScreenDump(buf, 'Test_cursorline_with_visualmode_01', {})
5898156ed37SBram Moolenaar
5908156ed37SBram Moolenaar  " clean up
5918156ed37SBram Moolenaar  call StopVimInTerminal(buf)
5928156ed37SBram Moolenaar  call delete('Xtest_cursorline_with_visualmode')
5938156ed37SBram Moolenaarendfunc
594f90b6e03SBram Moolenaar
595193ffd1dSBram Moolenaarfunc Test_wincolor()
5968c5a278fSBram Moolenaar  CheckScreendump
5973180fe6cSBram Moolenaar  " make sure the width is enough for the test
5983180fe6cSBram Moolenaar  set columns=80
599193ffd1dSBram Moolenaar
600e7eb9270SBram Moolenaar  let lines =<< trim END
601e7eb9270SBram Moolenaar	set cursorline cursorcolumn rnu
602053f712eSBram Moolenaar	call setline(1, ["","1111111111","22222222222","3 here 3","","the cat is out of the bag"])
603e7eb9270SBram Moolenaar	set wincolor=Pmenu
604053f712eSBram Moolenaar	hi CatLine guifg=green ctermfg=green
605053f712eSBram Moolenaar	hi Reverse gui=reverse cterm=reverse
606053f712eSBram Moolenaar	syn match CatLine /^the.*/
607053f712eSBram Moolenaar	call prop_type_add("foo", {"highlight": "Reverse", "combine": 1})
608053f712eSBram Moolenaar	call prop_add(6, 12, {"type": "foo", "end_col": 15})
609e7eb9270SBram Moolenaar	/here
610e7eb9270SBram Moolenaar  END
611e7eb9270SBram Moolenaar  call writefile(lines, 'Xtest_wincolor')
612193ffd1dSBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_wincolor', {'rows': 8})
6136a2c5a7dSBram Moolenaar  call TermWait(buf)
614193ffd1dSBram Moolenaar  call term_sendkeys(buf, "2G5lvj")
6156a2c5a7dSBram Moolenaar  call TermWait(buf)
616193ffd1dSBram Moolenaar
617193ffd1dSBram Moolenaar  call VerifyScreenDump(buf, 'Test_wincolor_01', {})
618193ffd1dSBram Moolenaar
619193ffd1dSBram Moolenaar  " clean up
620193ffd1dSBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
621193ffd1dSBram Moolenaar  call StopVimInTerminal(buf)
622193ffd1dSBram Moolenaar  call delete('Xtest_wincolor')
623193ffd1dSBram Moolenaarendfunc
624193ffd1dSBram Moolenaar
62542e931b0SBram Moolenaarfunc Test_wincolor_listchars()
62642e931b0SBram Moolenaar  CheckScreendump
627705724e4SBram Moolenaar  CheckFeature conceal
62842e931b0SBram Moolenaar
62942e931b0SBram Moolenaar  let lines =<< trim END
63042e931b0SBram Moolenaar	call setline(1, ["one","\t\tsome random text enough long to show 'extends' and 'precedes' includingnbsps, preceding tabs and trailing spaces    ","three"])
63142e931b0SBram Moolenaar	set wincolor=Todo
63242e931b0SBram Moolenaar	set nowrap cole=1 cocu+=n
63342e931b0SBram Moolenaar	set list lcs=eol:$,tab:>-,space:.,trail:_,extends:>,precedes:<,conceal:*,nbsp:#
63442e931b0SBram Moolenaar	call matchadd('Conceal', 'text')
63542e931b0SBram Moolenaar	normal 2G5zl
63642e931b0SBram Moolenaar  END
63742e931b0SBram Moolenaar  call writefile(lines, 'Xtest_wincolorlcs')
63842e931b0SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_wincolorlcs', {'rows': 8})
63942e931b0SBram Moolenaar
64042e931b0SBram Moolenaar  call VerifyScreenDump(buf, 'Test_wincolor_lcs', {})
64142e931b0SBram Moolenaar
64242e931b0SBram Moolenaar  " clean up
64342e931b0SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
64442e931b0SBram Moolenaar  call StopVimInTerminal(buf)
64542e931b0SBram Moolenaar  call delete('Xtest_wincolorlcs')
64642e931b0SBram Moolenaarendfunc
64742e931b0SBram Moolenaar
648010ee965SBram Moolenaarfunc Test_colorcolumn()
649010ee965SBram Moolenaar  CheckScreendump
650010ee965SBram Moolenaar
651010ee965SBram Moolenaar  " check that setting 'colorcolumn' when entering a buffer works
652010ee965SBram Moolenaar  let lines =<< trim END
653010ee965SBram Moolenaar	split
654010ee965SBram Moolenaar	edit X
655010ee965SBram Moolenaar	call setline(1, ["1111111111","22222222222","3333333333"])
656010ee965SBram Moolenaar	set nomodified
657010ee965SBram Moolenaar	set colorcolumn=3,9
658010ee965SBram Moolenaar	set number cursorline cursorlineopt=number
659010ee965SBram Moolenaar	wincmd w
660010ee965SBram Moolenaar	buf X
661010ee965SBram Moolenaar  END
662010ee965SBram Moolenaar  call writefile(lines, 'Xtest_colorcolumn')
663010ee965SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_colorcolumn', {'rows': 10})
664010ee965SBram Moolenaar  call term_sendkeys(buf, ":\<CR>")
6656a2c5a7dSBram Moolenaar  call TermWait(buf)
666010ee965SBram Moolenaar  call VerifyScreenDump(buf, 'Test_colorcolumn_1', {})
667010ee965SBram Moolenaar
668010ee965SBram Moolenaar  " clean up
669010ee965SBram Moolenaar  call StopVimInTerminal(buf)
670010ee965SBram Moolenaar  call delete('Xtest_colorcolumn')
671010ee965SBram Moolenaarendfunc
672010ee965SBram Moolenaar
673ad5e5631SBram Moolenaarfunc Test_colorcolumn_bri()
674ad5e5631SBram Moolenaar  CheckScreendump
675ad5e5631SBram Moolenaar
676ad5e5631SBram Moolenaar  " check 'colorcolumn' when 'breakindent' is set
677ad5e5631SBram Moolenaar  let lines =<< trim END
678ad5e5631SBram Moolenaar	call setline(1, 'The quick brown fox jumped over the lazy dogs')
679ad5e5631SBram Moolenaar  END
680ad5e5631SBram Moolenaar  call writefile(lines, 'Xtest_colorcolumn_bri')
681ad5e5631SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_colorcolumn_bri', {'rows': 10,'columns': 40})
682ad5e5631SBram Moolenaar  call term_sendkeys(buf, ":set co=40 linebreak bri briopt=shift:2 cc=40,41,43\<CR>")
683ad5e5631SBram Moolenaar  call TermWait(buf)
684ad5e5631SBram Moolenaar  call VerifyScreenDump(buf, 'Test_colorcolumn_2', {})
685ad5e5631SBram Moolenaar
686ad5e5631SBram Moolenaar  " clean up
687ad5e5631SBram Moolenaar  call StopVimInTerminal(buf)
688ad5e5631SBram Moolenaar  call delete('Xtest_colorcolumn_bri')
689ad5e5631SBram Moolenaarendfunc
690ad5e5631SBram Moolenaar
691ad5e5631SBram Moolenaarfunc Test_colorcolumn_sbr()
692ad5e5631SBram Moolenaar  CheckScreendump
693ad5e5631SBram Moolenaar
694ad5e5631SBram Moolenaar  " check 'colorcolumn' when 'showbreak' is set
695ad5e5631SBram Moolenaar  let lines =<< trim END
696ad5e5631SBram Moolenaar	call setline(1, 'The quick brown fox jumped over the lazy dogs')
697ad5e5631SBram Moolenaar  END
698ad5e5631SBram Moolenaar  call writefile(lines, 'Xtest_colorcolumn_srb')
699ad5e5631SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_colorcolumn_srb', {'rows': 10,'columns': 40})
700ad5e5631SBram Moolenaar  call term_sendkeys(buf, ":set co=40 showbreak=+++>\\  cc=40,41,43\<CR>")
701ad5e5631SBram Moolenaar  call TermWait(buf)
702ad5e5631SBram Moolenaar  call VerifyScreenDump(buf, 'Test_colorcolumn_3', {})
703ad5e5631SBram Moolenaar
704ad5e5631SBram Moolenaar  " clean up
705ad5e5631SBram Moolenaar  call StopVimInTerminal(buf)
706ad5e5631SBram Moolenaar  call delete('Xtest_colorcolumn_srb')
707ad5e5631SBram Moolenaarendfunc
708ad5e5631SBram Moolenaar
709f90b6e03SBram Moolenaar" This test must come before the Test_cursorline test, as it appears this
710f90b6e03SBram Moolenaar" defines the Normal highlighting group anyway.
7116b528fa0SBram Moolenaarfunc Test_1_highlight_Normalgroup_exists()
712f90b6e03SBram Moolenaar  let hlNormal = HighlightArgs('Normal')
713435f9f06SBram Moolenaar  if !has('gui_running')
714f90b6e03SBram Moolenaar    call assert_match('hi Normal\s*clear', hlNormal)
715435f9f06SBram Moolenaar  elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
716435f9f06SBram Moolenaar    " expect is DEFAULT_FONT of gui_gtk_x11.c
717435f9f06SBram Moolenaar    call assert_match('hi Normal\s*font=Monospace 10', hlNormal)
718435f9f06SBram Moolenaar  elseif has('gui_motif') || has('gui_athena')
719435f9f06SBram Moolenaar    " expect is DEFAULT_FONT of gui_x11.c
720435f9f06SBram Moolenaar    call assert_match('hi Normal\s*font=7x13', hlNormal)
721435f9f06SBram Moolenaar  elseif has('win32')
722435f9f06SBram Moolenaar    " expect any font
723435f9f06SBram Moolenaar    call assert_match('hi Normal\s*font=.*', hlNormal)
7246b528fa0SBram Moolenaar  endif
725f90b6e03SBram Moolenaarendfunc
726548be7f1SBram Moolenaar
7273180fe6cSBram Moolenaar" Do this test last, sometimes restoring the columns doesn't work
728ee4e0c1eSBram Moolenaarfunc Test_z_no_space_before_xxx()
729548be7f1SBram Moolenaar  let l:org_columns = &columns
730548be7f1SBram Moolenaar  set columns=17
731548be7f1SBram Moolenaar  let l:hi_StatusLineTermNC = join(split(execute('hi StatusLineTermNC')))
732548be7f1SBram Moolenaar  call assert_match('StatusLineTermNC xxx', l:hi_StatusLineTermNC)
733548be7f1SBram Moolenaar  let &columns = l:org_columns
734ee4e0c1eSBram Moolenaarendfunc
735ee4e0c1eSBram Moolenaar
736ee4e0c1eSBram Moolenaar" Test for :highlight command errors
737ee4e0c1eSBram Moolenaarfunc Test_highlight_cmd_errors()
738ee4e0c1eSBram Moolenaar  if has('gui_running')
739ee4e0c1eSBram Moolenaar    " This test doesn't fail in the MS-Windows console version.
74075e15670SBram Moolenaar    call assert_fails('hi Xcomment ctermbg=fg', 'E419:')
741ee4e0c1eSBram Moolenaar    call assert_fails('hi Xcomment ctermfg=bg', 'E420:')
74275e15670SBram Moolenaar    call assert_fails('hi Xcomment ctermfg=ul', 'E453:')
743ee4e0c1eSBram Moolenaar  endif
744ee4e0c1eSBram Moolenaar
745ee4e0c1eSBram Moolenaar  " Try using a very long terminal code. Define a dummy terminal code for this
746ee4e0c1eSBram Moolenaar  " test.
747ee4e0c1eSBram Moolenaar  let &t_fo = "\<Esc>1;"
748ee4e0c1eSBram Moolenaar  let c = repeat("t_fo,", 100) . "t_fo"
749ee4e0c1eSBram Moolenaar  call assert_fails('exe "hi Xgroup1 start=" . c', 'E422:')
750ee4e0c1eSBram Moolenaar  let &t_fo = ""
751ee4e0c1eSBram Moolenaarendfunc
752ee4e0c1eSBram Moolenaar
75375e15670SBram Moolenaar" Test for 'highlight' option
75475e15670SBram Moolenaarfunc Test_highlight_opt()
75575e15670SBram Moolenaar  let save_hl = &highlight
75675e15670SBram Moolenaar  call assert_fails('set highlight=j:b', 'E474:')
75775e15670SBram Moolenaar  set highlight=f\ r
75875e15670SBram Moolenaar  call assert_equal('f r', &highlight)
75975e15670SBram Moolenaar  set highlight=fb
76075e15670SBram Moolenaar  call assert_equal('fb', &highlight)
76175e15670SBram Moolenaar  set highlight=fi
76275e15670SBram Moolenaar  call assert_equal('fi', &highlight)
76375e15670SBram Moolenaar  set highlight=f-
76475e15670SBram Moolenaar  call assert_equal('f-', &highlight)
76575e15670SBram Moolenaar  set highlight=fr
76675e15670SBram Moolenaar  call assert_equal('fr', &highlight)
76775e15670SBram Moolenaar  set highlight=fs
76875e15670SBram Moolenaar  call assert_equal('fs', &highlight)
76975e15670SBram Moolenaar  set highlight=fu
77075e15670SBram Moolenaar  call assert_equal('fu', &highlight)
77175e15670SBram Moolenaar  set highlight=fc
77275e15670SBram Moolenaar  call assert_equal('fc', &highlight)
77375e15670SBram Moolenaar  set highlight=ft
77475e15670SBram Moolenaar  call assert_equal('ft', &highlight)
77575e15670SBram Moolenaar  call assert_fails('set highlight=fr:Search', 'E474:')
77675e15670SBram Moolenaar  set highlight=f:$#
77775e15670SBram Moolenaar  call assert_match('W18:', v:statusmsg)
77875e15670SBram Moolenaar  let &highlight = save_hl
77975e15670SBram Moolenaarendfunc
78075e15670SBram Moolenaar
78175e15670SBram Moolenaar" Test for User group highlighting used in the statusline
78275e15670SBram Moolenaarfunc Test_highlight_User()
78375e15670SBram Moolenaar  CheckNotGui
78475e15670SBram Moolenaar  hi User1 ctermfg=12
78575e15670SBram Moolenaar  redraw!
78675e15670SBram Moolenaar  call assert_equal('12', synIDattr(synIDtrans(hlID('User1')), 'fg'))
78775e15670SBram Moolenaar  hi clear
78875e15670SBram Moolenaarendfunc
78975e15670SBram Moolenaar
79075e15670SBram Moolenaar" Test for using RGB color values in a highlight group
79109fbedc8SBram Moolenaarfunc Test_xxlast_highlight_RGB_color()
79209fbedc8SBram Moolenaar  CheckCanRunGui
79309fbedc8SBram Moolenaar  gui -f
79475e15670SBram Moolenaar  hi MySearch guifg=#110000 guibg=#001100 guisp=#000011
79575e15670SBram Moolenaar  call assert_equal('#110000', synIDattr(synIDtrans(hlID('MySearch')), 'fg#'))
79675e15670SBram Moolenaar  call assert_equal('#001100', synIDattr(synIDtrans(hlID('MySearch')), 'bg#'))
79775e15670SBram Moolenaar  call assert_equal('#000011', synIDattr(synIDtrans(hlID('MySearch')), 'sp#'))
79875e15670SBram Moolenaar  hi clear
79975e15670SBram Moolenaarendfunc
80075e15670SBram Moolenaar
801de8f0f47SBram Moolenaar" Test for using default highlighting group
802de8f0f47SBram Moolenaarfunc Test_highlight_default()
803de8f0f47SBram Moolenaar  highlight MySearch ctermfg=7
804de8f0f47SBram Moolenaar  highlight default MySearch ctermfg=5
805de8f0f47SBram Moolenaar  let hlSearch = HighlightArgs('MySearch')
806de8f0f47SBram Moolenaar  call assert_match('ctermfg=7', hlSearch)
807de8f0f47SBram Moolenaar
808de8f0f47SBram Moolenaar  highlight default QFName ctermfg=3
809de8f0f47SBram Moolenaar  call assert_match('ctermfg=3', HighlightArgs('QFName'))
810de8f0f47SBram Moolenaar  hi clear
811de8f0f47SBram Moolenaarendfunc
812de8f0f47SBram Moolenaar
813de8f0f47SBram Moolenaar" Test for 'ctermul in a highlight group
814de8f0f47SBram Moolenaarfunc Test_highlight_ctermul()
815de8f0f47SBram Moolenaar  CheckNotGui
816de8f0f47SBram Moolenaar  call assert_notmatch('ctermul=', HighlightArgs('Normal'))
817de8f0f47SBram Moolenaar  highlight Normal ctermul=3
818de8f0f47SBram Moolenaar  call assert_match('ctermul=3', HighlightArgs('Normal'))
819391c3627SBram Moolenaar  call assert_equal('3', synIDattr(synIDtrans(hlID('Normal')), 'ul'))
820de8f0f47SBram Moolenaar  highlight Normal ctermul=NONE
821de8f0f47SBram Moolenaarendfunc
822de8f0f47SBram Moolenaar
823de8f0f47SBram Moolenaar" Test for specifying 'start' and 'stop' in a highlight group
824de8f0f47SBram Moolenaarfunc Test_highlight_start_stop()
825de8f0f47SBram Moolenaar  hi HlGrp1 start=<Esc>[27h;<Esc>[<Space>r;
826de8f0f47SBram Moolenaar  call assert_match("start=^[[27h;^[[ r;", HighlightArgs('HlGrp1'))
827de8f0f47SBram Moolenaar  hi HlGrp1 start=NONE
828de8f0f47SBram Moolenaar  call assert_notmatch("start=", HighlightArgs('HlGrp1'))
829de8f0f47SBram Moolenaar  hi HlGrp2 stop=<Esc>[27h;<Esc>[<Space>r;
830de8f0f47SBram Moolenaar  call assert_match("stop=^[[27h;^[[ r;", HighlightArgs('HlGrp2'))
831de8f0f47SBram Moolenaar  hi HlGrp2 stop=NONE
832de8f0f47SBram Moolenaar  call assert_notmatch("stop=", HighlightArgs('HlGrp2'))
833de8f0f47SBram Moolenaar  hi clear
834de8f0f47SBram Moolenaarendfunc
835de8f0f47SBram Moolenaar
836de8f0f47SBram Moolenaar" Test for setting various 'term' attributes
837de8f0f47SBram Moolenaarfunc Test_highlight_term_attr()
838de8f0f47SBram Moolenaar  hi HlGrp3 term=bold,underline,undercurl,strikethrough,reverse,italic,standout
839de8f0f47SBram Moolenaar  call assert_equal('hi HlGrp3          term=bold,standout,underline,undercurl,italic,reverse,strikethrough', HighlightArgs('HlGrp3'))
840de8f0f47SBram Moolenaar  hi HlGrp3 term=NONE
841de8f0f47SBram Moolenaar  call assert_equal('hi HlGrp3          cleared', HighlightArgs('HlGrp3'))
842de8f0f47SBram Moolenaar  hi clear
843de8f0f47SBram Moolenaarendfunc
844de8f0f47SBram Moolenaar
845213da551SBram Moolenaarfunc Test_highlight_clear_restores_links()
846213da551SBram Moolenaar  let aaa_id = hlID('aaa')
847213da551SBram Moolenaar  call assert_equal(aaa_id, 0)
848213da551SBram Moolenaar
849213da551SBram Moolenaar  " create default link aaa --> bbb
850213da551SBram Moolenaar  hi def link aaa bbb
851213da551SBram Moolenaar  let id_aaa = hlID('aaa')
852213da551SBram Moolenaar  let hl_aaa_bbb = HighlightArgs('aaa')
853213da551SBram Moolenaar
854213da551SBram Moolenaar  " try to redefine default link aaa --> ccc; check aaa --> bbb
855213da551SBram Moolenaar  hi def link aaa ccc
856213da551SBram Moolenaar  call assert_equal(HighlightArgs('aaa'), hl_aaa_bbb)
857213da551SBram Moolenaar
858213da551SBram Moolenaar  " clear aaa; check aaa --> bbb
859213da551SBram Moolenaar  hi clear aaa
860213da551SBram Moolenaar  call assert_equal(HighlightArgs('aaa'), hl_aaa_bbb)
861213da551SBram Moolenaar
862213da551SBram Moolenaar  " link aaa --> ccc; clear aaa; check aaa --> bbb
863213da551SBram Moolenaar  hi link aaa ccc
864213da551SBram Moolenaar  let id_ccc = hlID('ccc')
865213da551SBram Moolenaar  call assert_equal(synIDtrans(id_aaa), id_ccc)
866213da551SBram Moolenaar  hi clear aaa
867213da551SBram Moolenaar  call assert_equal(HighlightArgs('aaa'), hl_aaa_bbb)
868213da551SBram Moolenaar
869213da551SBram Moolenaar  " forcibly set default link aaa --> ddd
870213da551SBram Moolenaar  hi! def link aaa ddd
871213da551SBram Moolenaar  let id_ddd = hlID('ddd')
872213da551SBram Moolenaar  let hl_aaa_ddd = HighlightArgs('aaa')
873213da551SBram Moolenaar  call assert_equal(synIDtrans(id_aaa), id_ddd)
874213da551SBram Moolenaar
875213da551SBram Moolenaar  " link aaa --> eee; clear aaa; check aaa --> ddd
876213da551SBram Moolenaar  hi link aaa eee
877213da551SBram Moolenaar  let eee_id = hlID('eee')
878213da551SBram Moolenaar  call assert_equal(synIDtrans(id_aaa), eee_id)
879213da551SBram Moolenaar  hi clear aaa
880213da551SBram Moolenaar  call assert_equal(HighlightArgs('aaa'), hl_aaa_ddd)
881213da551SBram Moolenaarendfunc
882213da551SBram Moolenaar
883e8df0104SBram Moolenaarfunc Test_highlight_clear_restores_context()
884e8df0104SBram Moolenaar  func FuncContextDefault()
885e8df0104SBram Moolenaar    hi def link Context ContextDefault
886e8df0104SBram Moolenaar  endfun
887e8df0104SBram Moolenaar
888e8df0104SBram Moolenaar  func FuncContextRelink()
889e8df0104SBram Moolenaar    " Dummy line
890e8df0104SBram Moolenaar    hi link Context ContextRelink
891e8df0104SBram Moolenaar  endfunc
892e8df0104SBram Moolenaar
893e8df0104SBram Moolenaar  let scriptContextDefault = MakeScript("FuncContextDefault")
894e8df0104SBram Moolenaar  let scriptContextRelink = MakeScript("FuncContextRelink")
895e8df0104SBram Moolenaar  let patContextDefault = fnamemodify(scriptContextDefault, ':t') .. ' line 1'
896e8df0104SBram Moolenaar  let patContextRelink = fnamemodify(scriptContextRelink, ':t') .. ' line 2'
897e8df0104SBram Moolenaar
8982bbada81SBram Moolenaar  exec 'source ' .. scriptContextDefault
899e8df0104SBram Moolenaar  let hlContextDefault = execute("verbose hi Context")
900e8df0104SBram Moolenaar  call assert_match(patContextDefault, hlContextDefault)
901e8df0104SBram Moolenaar
9022bbada81SBram Moolenaar  exec 'source ' .. scriptContextRelink
903e8df0104SBram Moolenaar  let hlContextRelink = execute("verbose hi Context")
904e8df0104SBram Moolenaar  call assert_match(patContextRelink, hlContextRelink)
905e8df0104SBram Moolenaar
906e8df0104SBram Moolenaar  hi clear
907e8df0104SBram Moolenaar  let hlContextAfterClear = execute("verbose hi Context")
908e8df0104SBram Moolenaar  call assert_match(patContextDefault, hlContextAfterClear)
909e8df0104SBram Moolenaar
910e8df0104SBram Moolenaar  delfunc FuncContextDefault
911e8df0104SBram Moolenaar  delfunc FuncContextRelink
912e8df0104SBram Moolenaar  call delete(scriptContextDefault)
913e8df0104SBram Moolenaar  call delete(scriptContextRelink)
914e8df0104SBram Moolenaarendfunc
915e8df0104SBram Moolenaar
916213da551SBram Moolenaarfunc Test_highlight_default_colorscheme_restores_links()
917213da551SBram Moolenaar  hi link TestLink Identifier
918213da551SBram Moolenaar  hi TestHi ctermbg=red
91905eb5b9cSBram Moolenaar
92005eb5b9cSBram Moolenaar  let hlTestLinkPre = HighlightArgs('TestLink')
92105eb5b9cSBram Moolenaar  let hlTestHiPre = HighlightArgs('TestHi')
92205eb5b9cSBram Moolenaar
92305eb5b9cSBram Moolenaar  " Test colorscheme
92405eb5b9cSBram Moolenaar  hi clear
92505eb5b9cSBram Moolenaar  if exists('syntax_on')
92605eb5b9cSBram Moolenaar    syntax reset
92705eb5b9cSBram Moolenaar  endif
92805eb5b9cSBram Moolenaar  let g:colors_name = 'test'
929213da551SBram Moolenaar  hi link TestLink ErrorMsg
930213da551SBram Moolenaar  hi TestHi ctermbg=green
93105eb5b9cSBram Moolenaar
93205eb5b9cSBram Moolenaar  " Restore default highlighting
93305eb5b9cSBram Moolenaar  colorscheme default
93405eb5b9cSBram Moolenaar  " 'default' should work no matter if highlight group was cleared
93505eb5b9cSBram Moolenaar  hi def link TestLink Identifier
93605eb5b9cSBram Moolenaar  hi def TestHi ctermbg=red
93705eb5b9cSBram Moolenaar  let hlTestLinkPost = HighlightArgs('TestLink')
93805eb5b9cSBram Moolenaar  let hlTestHiPost = HighlightArgs('TestHi')
93905eb5b9cSBram Moolenaar  call assert_equal(hlTestLinkPre, hlTestLinkPost)
94005eb5b9cSBram Moolenaar  call assert_equal(hlTestHiPre, hlTestHiPost)
94105eb5b9cSBram Moolenaar  hi clear
94205eb5b9cSBram Moolenaarendfunc
94305eb5b9cSBram Moolenaar
944e30d1025SDrew Vogelfunc Test_colornames_assignment_and_lookup()
945a0fca172SDrew Vogel  CheckAnyOf Feature:gui_running Feature:termguicolors
946a0fca172SDrew Vogel
947e30d1025SDrew Vogel  " Ensure highlight command can find custom color.
948e30d1025SDrew Vogel  let v:colornames['a redish white'] = '#ffeedd'
949e30d1025SDrew Vogel  highlight Normal guifg='a redish white'
950e30d1025SDrew Vogel  highlight clear
951a0fca172SDrew Vogel  call ClearDict(v:colornames)
952e30d1025SDrew Vogelendfunc
953e30d1025SDrew Vogel
954e30d1025SDrew Vogelfunc Test_colornames_default_list()
955a0fca172SDrew Vogel  CheckAnyOf Feature:gui_running Feature:termguicolors
956a0fca172SDrew Vogel
957e30d1025SDrew Vogel  " Ensure default lists are loaded automatically and can be used for all gui fields.
958a0fca172SDrew Vogel  call assert_equal(0, len(v:colornames))
959e30d1025SDrew Vogel  highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
960a0fca172SDrew Vogel  call assert_notequal(0, len(v:colornames))
961a0fca172SDrew Vogel  echo v:colornames['rebecca purple']
962e30d1025SDrew Vogel  highlight clear
963a0fca172SDrew Vogel  call ClearDict(v:colornames)
964e30d1025SDrew Vogelendfunc
965e30d1025SDrew Vogel
966e30d1025SDrew Vogelfunc Test_colornames_overwrite_default()
967a0fca172SDrew Vogel  CheckAnyOf Feature:gui_running Feature:termguicolors
968a0fca172SDrew Vogel
969e30d1025SDrew Vogel  " Ensure entries in v:colornames can be overwritten.
970e30d1025SDrew Vogel  " Load default color scheme to trigger default color list loading.
971e30d1025SDrew Vogel  colorscheme default
972e30d1025SDrew Vogel  let old_rebecca_purple = v:colornames['rebecca purple']
973e30d1025SDrew Vogel  highlight Normal guifg='rebecca purple' guibg='rebecca purple'
974e30d1025SDrew Vogel  let v:colornames['rebecca purple'] = '#550099'
975e30d1025SDrew Vogel  highlight Normal guifg='rebecca purple' guibg='rebecca purple'
976e30d1025SDrew Vogel  let v:colornames['rebecca purple'] = old_rebecca_purple
977e30d1025SDrew Vogel  highlight clear
978e30d1025SDrew Vogelendfunc
979e30d1025SDrew Vogel
980e30d1025SDrew Vogelfunc Test_colornames_assignment_and_unassignment()
981a0fca172SDrew Vogel  " No feature check is needed for this test because the v:colornames dict
982a0fca172SDrew Vogel  " always exists with +eval. The feature checks are only required for
983a0fca172SDrew Vogel  " commands that do color lookup.
984a0fca172SDrew Vogel
985e30d1025SDrew Vogel  " Ensure we cannot overwrite the v:colornames dict.
986e30d1025SDrew Vogel  call assert_fails("let v:colornames = {}", 'E46:')
987e30d1025SDrew Vogel
988e30d1025SDrew Vogel  " Ensure we can delete entries from the v:colornames dict.
989e30d1025SDrew Vogel  let v:colornames['x1'] = '#111111'
990e30d1025SDrew Vogel  call assert_equal(v:colornames['x1'], '#111111')
991e30d1025SDrew Vogel  unlet v:colornames['x1']
992e30d1025SDrew Vogel  call assert_fails("echo v:colornames['x1']")
993e30d1025SDrew Vogelendfunc
994e30d1025SDrew Vogel
995d1a8d658SYegappan Lakshmanan" Test for the hlget() function
996d1a8d658SYegappan Lakshmananfunc Test_hlget()
997d1a8d658SYegappan Lakshmanan  let lines =<< trim END
998d1a8d658SYegappan Lakshmanan    call assert_notequal([], filter(hlget(), 'v:val.name == "Visual"'))
999d1a8d658SYegappan Lakshmanan    call assert_equal([], hlget('SomeHLGroup'))
1000d1a8d658SYegappan Lakshmanan    highlight MyHLGroup term=standout cterm=reverse ctermfg=10 ctermbg=Black
1001d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlID('MyHLGroup'), 'ctermfg': '10', 'name': 'MyHLGroup', 'term': {'standout': v:true}, 'ctermbg': '0', 'cterm': {'reverse': v:true}}], hlget('MyHLGroup'))
1002d1a8d658SYegappan Lakshmanan    highlight clear MyHLGroup
1003d1a8d658SYegappan Lakshmanan    call assert_equal(v:true, hlget('MyHLGroup')[0].cleared)
1004d1a8d658SYegappan Lakshmanan    highlight link MyHLGroup IncSearch
1005d1a8d658SYegappan Lakshmanan    call assert_equal('IncSearch', hlget('MyHLGroup')[0].linksto)
1006d1a8d658SYegappan Lakshmanan    highlight clear MyHLGroup
1007d1a8d658SYegappan Lakshmanan    call assert_equal([], hlget(test_null_string()))
1008d1a8d658SYegappan Lakshmanan    call assert_equal([], hlget(""))
1009d1a8d658SYegappan Lakshmanan  END
1010d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1011d1a8d658SYegappan Lakshmanan
1012d1a8d658SYegappan Lakshmanan  " Test for resolving highlight group links
1013d1a8d658SYegappan Lakshmanan  let lines =<< trim END
1014d1a8d658SYegappan Lakshmanan    highlight hlgA term=bold
1015d1a8d658SYegappan Lakshmanan    VAR hlgAid = hlID('hlgA')
1016d1a8d658SYegappan Lakshmanan    highlight link hlgB hlgA
1017d1a8d658SYegappan Lakshmanan    VAR hlgBid = hlID('hlgB')
1018d1a8d658SYegappan Lakshmanan    highlight link hlgC hlgB
1019d1a8d658SYegappan Lakshmanan    VAR hlgCid = hlID('hlgC')
1020d1a8d658SYegappan Lakshmanan    call assert_equal('hlgA', hlget('hlgB')[0].linksto)
1021d1a8d658SYegappan Lakshmanan    call assert_equal('hlgB', hlget('hlgC')[0].linksto)
1022d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgAid, 'name': 'hlgA',
1023d1a8d658SYegappan Lakshmanan                      \ 'term': {'bold': v:true}}], hlget('hlgA'))
1024d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgBid, 'name': 'hlgB',
1025d1a8d658SYegappan Lakshmanan                      \ 'linksto': 'hlgA'}], hlget('hlgB'))
1026d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgCid, 'name': 'hlgC',
1027d1a8d658SYegappan Lakshmanan                      \ 'linksto': 'hlgB'}], hlget('hlgC'))
1028d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgAid, 'name': 'hlgA',
1029d1a8d658SYegappan Lakshmanan                      \ 'term': {'bold': v:true}}], hlget('hlgA', v:false))
1030d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgBid, 'name': 'hlgB',
1031d1a8d658SYegappan Lakshmanan                      \ 'linksto': 'hlgA'}], hlget('hlgB', 0))
1032d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgCid, 'name': 'hlgC',
1033d1a8d658SYegappan Lakshmanan                      \ 'linksto': 'hlgB'}], hlget('hlgC', v:false))
1034d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgAid, 'name': 'hlgA',
1035d1a8d658SYegappan Lakshmanan                      \ 'term': {'bold': v:true}}], hlget('hlgA', v:true))
1036d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgBid, 'name': 'hlgB',
1037d1a8d658SYegappan Lakshmanan                      \ 'term': {'bold': v:true}}], hlget('hlgB', 1))
1038d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': hlgCid, 'name': 'hlgC',
1039d1a8d658SYegappan Lakshmanan                      \ 'term': {'bold': v:true}}], hlget('hlgC', v:true))
1040d1a8d658SYegappan Lakshmanan  END
1041d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1042d1a8d658SYegappan Lakshmanan
1043d1a8d658SYegappan Lakshmanan  call assert_fails('call hlget([])', 'E1174:')
1044d1a8d658SYegappan Lakshmanan  call assert_fails('call hlget("abc", "xyz")', 'E1212:')
1045d1a8d658SYegappan Lakshmananendfunc
1046d1a8d658SYegappan Lakshmanan
1047d1a8d658SYegappan Lakshmanan" Test for the hlset() function
1048d1a8d658SYegappan Lakshmananfunc Test_hlset()
1049d1a8d658SYegappan Lakshmanan  let lines =<< trim END
1050d1a8d658SYegappan Lakshmanan    call assert_equal(0, hlset(test_null_list()))
1051d1a8d658SYegappan Lakshmanan    call assert_equal(0, hlset([]))
1052d1a8d658SYegappan Lakshmanan    call assert_fails('call hlset(["Search"])', 'E715:')
1053d1a8d658SYegappan Lakshmanan    call hlset(hlget())
1054d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'NewHLGroup', 'cterm': {'reverse': v:true}, 'ctermfg': '10'}])
1055d1a8d658SYegappan Lakshmanan    call assert_equal({'reverse': v:true}, hlget('NewHLGroup')[0].cterm)
1056d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'NewHLGroup', 'cterm': {'bold': v:true}}])
1057d1a8d658SYegappan Lakshmanan    call assert_equal({'bold': v:true}, hlget('NewHLGroup')[0].cterm)
1058d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'NewHLGroup', 'cleared': v:true}])
1059d1a8d658SYegappan Lakshmanan    call assert_equal(v:true, hlget('NewHLGroup')[0].cleared)
1060d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'NewHLGroup', 'linksto': 'Search'}])
1061d1a8d658SYegappan Lakshmanan    call assert_false(has_key(hlget('NewHLGroup')[0], 'cleared'))
1062d1a8d658SYegappan Lakshmanan    call assert_equal('Search', hlget('NewHLGroup')[0].linksto)
1063d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': [], 'ctermfg': '10'}])", 'E928:')
1064d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'cleared': []}])",
1065d1a8d658SYegappan Lakshmanan          \ 'E745:')
1066d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'cterm': 'Blue'}])",
1067d1a8d658SYegappan Lakshmanan          \ 'E715:')
1068d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'ctermbg': []}])",
1069d1a8d658SYegappan Lakshmanan          \ 'E928:')
1070d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'ctermfg': []}])",
1071d1a8d658SYegappan Lakshmanan          \ 'E928:')
1072d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'ctermul': []}])",
1073d1a8d658SYegappan Lakshmanan          \ 'E928:')
1074d1a8d658SYegappan Lakshmanan    if has('gui')
1075d1a8d658SYegappan Lakshmanan      call assert_fails("call hlset([{'name': 'NewHLGroup', 'font': []}])",
1076d1a8d658SYegappan Lakshmanan            \ 'E928:')
1077d1a8d658SYegappan Lakshmanan    endif
1078d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'gui': 'Cyan'}])",
1079d1a8d658SYegappan Lakshmanan          \ 'E715:')
1080d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'guibg': []}])",
1081d1a8d658SYegappan Lakshmanan          \ 'E928:')
1082d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'guifg': []}])",
1083d1a8d658SYegappan Lakshmanan          \ 'E928:')
1084d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'guisp': []}])",
1085d1a8d658SYegappan Lakshmanan          \ 'E928:')
1086d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'linksto': []}])",
1087d1a8d658SYegappan Lakshmanan          \ 'E928:')
1088d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'start': []}])",
1089d1a8d658SYegappan Lakshmanan          \ 'E928:')
1090d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'stop': []}])",
1091d1a8d658SYegappan Lakshmanan          \ 'E928:')
1092d1a8d658SYegappan Lakshmanan    call assert_fails("call hlset([{'name': 'NewHLGroup', 'term': 'Cyan'}])",
1093d1a8d658SYegappan Lakshmanan          \ 'E715:')
1094d1a8d658SYegappan Lakshmanan    call assert_equal('Search', hlget('NewHLGroup')[0].linksto)
1095d1a8d658SYegappan Lakshmanan    highlight clear NewHLGroup
1096d1a8d658SYegappan Lakshmanan  END
1097d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1098d1a8d658SYegappan Lakshmanan
1099d1a8d658SYegappan Lakshmanan  " Test for clearing the 'term', 'cterm' and 'gui' attributes of a highlight
1100d1a8d658SYegappan Lakshmanan  " group.
1101d1a8d658SYegappan Lakshmanan  let lines =<< trim END
1102d1a8d658SYegappan Lakshmanan    highlight myhlg1 term=bold cterm=italic gui=standout
1103d1a8d658SYegappan Lakshmanan    VAR id = hlID('myhlg1')
1104d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'myhlg1', 'term': {}}])
1105d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': id, 'name': 'myhlg1',
1106d1a8d658SYegappan Lakshmanan                \ 'cterm': {'italic': v:true}, 'gui': {'standout': v:true}}],
1107d1a8d658SYegappan Lakshmanan                \ hlget('myhlg1'))
1108d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'myhlg1', 'cterm': {}}])
1109d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': id, 'name': 'myhlg1',
1110d1a8d658SYegappan Lakshmanan                \ 'gui': {'standout': v:true}}], hlget('myhlg1'))
1111d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'myhlg1', 'gui': {}}])
1112d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': id, 'name': 'myhlg1', 'cleared': v:true}],
1113d1a8d658SYegappan Lakshmanan                \ hlget('myhlg1'))
1114d1a8d658SYegappan Lakshmanan    highlight clear myhlg1
1115d1a8d658SYegappan Lakshmanan  END
1116d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1117d1a8d658SYegappan Lakshmanan
1118d1a8d658SYegappan Lakshmanan  " Test for setting all the 'term', 'cterm' and 'gui' attributes of a
1119d1a8d658SYegappan Lakshmanan  " highlight group
1120d1a8d658SYegappan Lakshmanan  let lines =<< trim END
1121d1a8d658SYegappan Lakshmanan    VAR attr = {'bold': v:true, 'underline': v:true, 'undercurl': v:true,
1122d1a8d658SYegappan Lakshmanan                \ 'strikethrough': v:true, 'reverse': v:true, 'italic': v:true,
1123d1a8d658SYegappan Lakshmanan                \ 'standout': v:true, 'nocombine': v:true}
1124d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'myhlg2', 'term': attr, 'cterm': attr, 'gui': attr}])
1125d1a8d658SYegappan Lakshmanan    VAR id2 = hlID('myhlg2')
1126*2a16dc66SYegappan Lakshmanan    VAR expected = "myhlg2 xxx term=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough cterm=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough gui=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough"
1127*2a16dc66SYegappan Lakshmanan    VAR output = execute('highlight myhlg2')
1128*2a16dc66SYegappan Lakshmanan    LET output = output->split("\n")->join()->substitute('\s\+', ' ', 'g')
1129*2a16dc66SYegappan Lakshmanan    call assert_equal(expected, output)
1130d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr,
1131d1a8d658SYegappan Lakshmanan                      \ 'term': attr, 'cterm': attr}], hlget('myhlg2'))
1132d1a8d658SYegappan Lakshmanan  END
1133d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1134d1a8d658SYegappan Lakshmanan
1135d1a8d658SYegappan Lakshmanan  " Test for clearing some of the 'term', 'cterm' and 'gui' attributes of a
1136d1a8d658SYegappan Lakshmanan  " highlight group
1137d1a8d658SYegappan Lakshmanan  let lines =<< trim END
1138d1a8d658SYegappan Lakshmanan    VAR attr = {'bold': v:false, 'underline': v:true, 'strikethrough': v:true}
1139d1a8d658SYegappan Lakshmanan    call hlset([{'name': 'myhlg2', 'term': attr, 'cterm': attr, 'gui': attr}])
1140d1a8d658SYegappan Lakshmanan    VAR id2 = hlID('myhlg2')
1141*2a16dc66SYegappan Lakshmanan    VAR expected = "myhlg2 xxx term=underline,strikethrough cterm=underline,strikethrough gui=underline,strikethrough"
1142*2a16dc66SYegappan Lakshmanan    VAR output = execute('highlight myhlg2')
1143*2a16dc66SYegappan Lakshmanan    LET output = output->split("\n")->join()->substitute('\s\+', ' ', 'g')
1144*2a16dc66SYegappan Lakshmanan    call assert_equal(expected, output)
1145d1a8d658SYegappan Lakshmanan    LET attr = {'underline': v:true, 'strikethrough': v:true}
1146d1a8d658SYegappan Lakshmanan    call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr,
1147d1a8d658SYegappan Lakshmanan                      \ 'term': attr, 'cterm': attr}], hlget('myhlg2'))
1148d1a8d658SYegappan Lakshmanan  END
1149d1a8d658SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
11506a950a60SDominique Pelle
1151*2a16dc66SYegappan Lakshmanan  " Test for clearing the attributes and link of a highlight group
1152*2a16dc66SYegappan Lakshmanan  let lines =<< trim END
1153*2a16dc66SYegappan Lakshmanan    highlight myhlg3 ctermbg=green guibg=green
1154*2a16dc66SYegappan Lakshmanan    highlight! default link myhlg3 ErrorMsg
1155*2a16dc66SYegappan Lakshmanan    VAR id3 = hlID('myhlg3')
1156*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'myhlg3', 'cleared': v:true, 'linksto': 'NONE'}])
1157*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id3, 'name': 'myhlg3', 'cleared': v:true}],
1158*2a16dc66SYegappan Lakshmanan                      \ hlget('myhlg3'))
1159*2a16dc66SYegappan Lakshmanan    highlight clear hlg3
1160*2a16dc66SYegappan Lakshmanan  END
1161*2a16dc66SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1162*2a16dc66SYegappan Lakshmanan
1163*2a16dc66SYegappan Lakshmanan  " Test for setting default attributes for a highlight group
1164*2a16dc66SYegappan Lakshmanan  let lines =<< trim END
1165*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg4', 'ctermfg': '8'}])
1166*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg4', 'default': v:true, 'ctermfg': '9'}])
1167*2a16dc66SYegappan Lakshmanan    VAR id4 = hlID('hlg4')
1168*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id4, 'name': 'hlg4', 'ctermfg': '8'}],
1169*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg4'))
1170*2a16dc66SYegappan Lakshmanan    highlight clear hlg4
1171*2a16dc66SYegappan Lakshmanan
1172*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg5', 'default': v:true, 'ctermbg': '2'}])
1173*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg5', 'ctermbg': '4'}])
1174*2a16dc66SYegappan Lakshmanan    VAR id5 = hlID('hlg5')
1175*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id5, 'name': 'hlg5', 'ctermbg': '4'}],
1176*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg5'))
1177*2a16dc66SYegappan Lakshmanan    highlight clear hlg5
1178*2a16dc66SYegappan Lakshmanan
1179*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg6', 'linksto': 'Error'}])
1180*2a16dc66SYegappan Lakshmanan    VAR id6 = hlID('hlg6')
1181*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg6', 'default': v:true, 'ctermbg': '2'}])
1182*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id6, 'name': 'hlg6', 'linksto': 'Error'}],
1183*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg6'))
1184*2a16dc66SYegappan Lakshmanan    highlight clear hlg6
1185*2a16dc66SYegappan Lakshmanan  END
1186*2a16dc66SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1187*2a16dc66SYegappan Lakshmanan
1188*2a16dc66SYegappan Lakshmanan  " Test for setting default links for a highlight group
1189*2a16dc66SYegappan Lakshmanan  let lines =<< trim END
1190*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg7', 'ctermfg': '5'}])
1191*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg7', 'default': v:true, 'linksto': 'Search'}])
1192*2a16dc66SYegappan Lakshmanan    VAR id7 = hlID('hlg7')
1193*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id7, 'name': 'hlg7', 'ctermfg': '5'}],
1194*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg7'))
1195*2a16dc66SYegappan Lakshmanan    highlight clear hlg7
1196*2a16dc66SYegappan Lakshmanan
1197*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg8', 'default': v:true, 'linksto': 'Search'}])
1198*2a16dc66SYegappan Lakshmanan    VAR id8 = hlID('hlg8')
1199*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id8, 'name': 'hlg8', 'default': v:true,
1200*2a16dc66SYegappan Lakshmanan                    \ 'linksto': 'Search'}], hlget('hlg8'))
1201*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg8', 'ctermbg': '2'}])
1202*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id8, 'name': 'hlg8', 'ctermbg': '2'}],
1203*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg8'))
1204*2a16dc66SYegappan Lakshmanan    highlight clear hlg8
1205*2a16dc66SYegappan Lakshmanan
1206*2a16dc66SYegappan Lakshmanan    highlight default link hlg9 ErrorMsg
1207*2a16dc66SYegappan Lakshmanan    VAR hlg_save = hlget('hlg9')
1208*2a16dc66SYegappan Lakshmanan    LET hlg_save[0]['name'] = 'hlg9dup'
1209*2a16dc66SYegappan Lakshmanan    call hlset(hlg_save)
1210*2a16dc66SYegappan Lakshmanan    VAR id9 = hlID('hlg9dup')
1211*2a16dc66SYegappan Lakshmanan    highlight clear hlg9dup
1212*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id9, 'name': 'hlg9dup', 'default': v:true,
1213*2a16dc66SYegappan Lakshmanan                    \ 'linksto': 'ErrorMsg'}], hlget('hlg9dup'))
1214*2a16dc66SYegappan Lakshmanan    highlight clear hlg9
1215*2a16dc66SYegappan Lakshmanan  END
1216*2a16dc66SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1217*2a16dc66SYegappan Lakshmanan
1218*2a16dc66SYegappan Lakshmanan  " Test for force creating a link to a highlight group
1219*2a16dc66SYegappan Lakshmanan  let lines =<< trim END
1220*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg10', 'ctermfg': '8'}])
1221*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg10', 'linksto': 'Search'}])
1222*2a16dc66SYegappan Lakshmanan    VAR id10 = hlID('hlg10')
1223*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id10, 'name': 'hlg10', 'ctermfg': '8'}],
1224*2a16dc66SYegappan Lakshmanan                    \ hlget('hlg10'))
1225*2a16dc66SYegappan Lakshmanan    call hlset([{'name': 'hlg10', 'linksto': 'Search', 'force': v:true}])
1226*2a16dc66SYegappan Lakshmanan    call assert_equal([{'id': id10, 'name': 'hlg10', 'ctermfg': '8',
1227*2a16dc66SYegappan Lakshmanan                    \ 'linksto': 'Search'}], hlget('hlg10'))
1228*2a16dc66SYegappan Lakshmanan    highlight clear hlg10
1229*2a16dc66SYegappan Lakshmanan  END
1230*2a16dc66SYegappan Lakshmanan  call CheckLegacyAndVim9Success(lines)
1231d1a8d658SYegappan Lakshmananendfunc
1232d1a8d658SYegappan Lakshmanan
1233ee4e0c1eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1234