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' includingnbsps, 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