1410e98a7SBram Moolenaar" Test for cursorline and cursorlineopt 2017ba07fSBram Moolenaar 3410e98a7SBram Moolenaarsource check.vim 4017ba07fSBram Moolenaarsource screendump.vim 5410e98a7SBram Moolenaar 6410e98a7SBram Moolenaarfunction! s:screen_attr(lnum) abort 7410e98a7SBram Moolenaar return map(range(1, 8), 'screenattr(a:lnum, v:val)') 8410e98a7SBram Moolenaarendfunction 9410e98a7SBram Moolenaar 10410e98a7SBram Moolenaarfunction! s:test_windows(h, w) abort 11410e98a7SBram Moolenaar call NewWindow(a:h, a:w) 12410e98a7SBram Moolenaarendfunction 13410e98a7SBram Moolenaar 14410e98a7SBram Moolenaarfunction! s:close_windows() abort 15410e98a7SBram Moolenaar call CloseWindow() 16410e98a7SBram Moolenaarendfunction 17410e98a7SBram Moolenaar 18410e98a7SBram Moolenaarfunction! s:new_hi() abort 19410e98a7SBram Moolenaar redir => save_hi 20410e98a7SBram Moolenaar silent! hi CursorLineNr 21410e98a7SBram Moolenaar redir END 22410e98a7SBram Moolenaar let save_hi = join(split(substitute(save_hi, '\s*xxx\s*', ' ', ''), "\n"), '') 23410e98a7SBram Moolenaar exe 'hi' save_hi 'ctermbg=0 guibg=Black' 24410e98a7SBram Moolenaar return save_hi 25410e98a7SBram Moolenaarendfunction 26410e98a7SBram Moolenaar 27410e98a7SBram Moolenaarfunc Test_cursorline_highlight1() 28410e98a7SBram Moolenaar let save_hi = s:new_hi() 29410e98a7SBram Moolenaar try 30410e98a7SBram Moolenaar call s:test_windows(10, 20) 31410e98a7SBram Moolenaar call setline(1, repeat(['aaaa'], 10)) 32410e98a7SBram Moolenaar redraw 33410e98a7SBram Moolenaar let attr01 = s:screen_attr(1) 34410e98a7SBram Moolenaar call assert_equal(repeat([attr01[0]], 8), attr01) 35410e98a7SBram Moolenaar 36410e98a7SBram Moolenaar setl number numberwidth=4 37410e98a7SBram Moolenaar redraw 38410e98a7SBram Moolenaar let attr11 = s:screen_attr(1) 39410e98a7SBram Moolenaar call assert_equal(repeat([attr11[0]], 4), attr11[0:3]) 40410e98a7SBram Moolenaar call assert_equal(repeat([attr11[4]], 4), attr11[4:7]) 41410e98a7SBram Moolenaar call assert_notequal(attr11[0], attr11[4]) 42410e98a7SBram Moolenaar 43410e98a7SBram Moolenaar setl cursorline 44410e98a7SBram Moolenaar redraw 45410e98a7SBram Moolenaar let attr21 = s:screen_attr(1) 46410e98a7SBram Moolenaar let attr22 = s:screen_attr(2) 47410e98a7SBram Moolenaar call assert_equal(repeat([attr21[0]], 4), attr21[0:3]) 48410e98a7SBram Moolenaar call assert_equal(repeat([attr21[4]], 4), attr21[4:7]) 49410e98a7SBram Moolenaar call assert_equal(attr11, attr22) 50410e98a7SBram Moolenaar call assert_notequal(attr22, attr21) 51410e98a7SBram Moolenaar 52410e98a7SBram Moolenaar setl nocursorline relativenumber 53410e98a7SBram Moolenaar redraw 54410e98a7SBram Moolenaar let attr31 = s:screen_attr(1) 5549474ca1SBram Moolenaar call assert_equal(attr22[0:3], attr31[0:3]) 56410e98a7SBram Moolenaar call assert_equal(attr11[4:7], attr31[4:7]) 57410e98a7SBram Moolenaar 58410e98a7SBram Moolenaar call s:close_windows() 59410e98a7SBram Moolenaar finally 60410e98a7SBram Moolenaar exe 'hi' save_hi 61410e98a7SBram Moolenaar endtry 62410e98a7SBram Moolenaarendfunc 63410e98a7SBram Moolenaar 64410e98a7SBram Moolenaarfunc Test_cursorline_highlight2() 65410e98a7SBram Moolenaar CheckOption cursorlineopt 66410e98a7SBram Moolenaar 67410e98a7SBram Moolenaar let save_hi = s:new_hi() 68410e98a7SBram Moolenaar try 69410e98a7SBram Moolenaar call s:test_windows(10, 20) 70410e98a7SBram Moolenaar call setline(1, repeat(['aaaa'], 10)) 71410e98a7SBram Moolenaar redraw 72410e98a7SBram Moolenaar let attr0 = s:screen_attr(1) 73410e98a7SBram Moolenaar call assert_equal(repeat([attr0[0]], 8), attr0) 74410e98a7SBram Moolenaar 75410e98a7SBram Moolenaar setl number 76410e98a7SBram Moolenaar redraw 77410e98a7SBram Moolenaar let attr1 = s:screen_attr(1) 78410e98a7SBram Moolenaar call assert_notequal(attr0[0:3], attr1[0:3]) 79410e98a7SBram Moolenaar call assert_equal(attr0[0:3], attr1[4:7]) 80410e98a7SBram Moolenaar 81410e98a7SBram Moolenaar setl cursorline cursorlineopt=both 82410e98a7SBram Moolenaar redraw 83410e98a7SBram Moolenaar let attr2 = s:screen_attr(1) 84410e98a7SBram Moolenaar call assert_notequal(attr1[0:3], attr2[0:3]) 85410e98a7SBram Moolenaar call assert_notequal(attr1[4:7], attr2[4:7]) 86410e98a7SBram Moolenaar 87410e98a7SBram Moolenaar setl cursorlineopt=line 88410e98a7SBram Moolenaar redraw 89410e98a7SBram Moolenaar let attr3 = s:screen_attr(1) 90410e98a7SBram Moolenaar call assert_equal(attr1[0:3], attr3[0:3]) 91410e98a7SBram Moolenaar call assert_equal(attr2[4:7], attr3[4:7]) 92410e98a7SBram Moolenaar 93410e98a7SBram Moolenaar setl cursorlineopt=number 94410e98a7SBram Moolenaar redraw 95410e98a7SBram Moolenaar let attr4 = s:screen_attr(1) 96410e98a7SBram Moolenaar call assert_equal(attr2[0:3], attr4[0:3]) 97410e98a7SBram Moolenaar call assert_equal(attr1[4:7], attr4[4:7]) 98410e98a7SBram Moolenaar 99410e98a7SBram Moolenaar setl nonumber 100410e98a7SBram Moolenaar redraw 101410e98a7SBram Moolenaar let attr5 = s:screen_attr(1) 102410e98a7SBram Moolenaar call assert_equal(attr0, attr5) 103410e98a7SBram Moolenaar 104410e98a7SBram Moolenaar call s:close_windows() 105410e98a7SBram Moolenaar finally 106410e98a7SBram Moolenaar exe 'hi' save_hi 107410e98a7SBram Moolenaar endtry 108410e98a7SBram Moolenaarendfunc 109017ba07fSBram Moolenaar 110017ba07fSBram Moolenaarfunc Test_cursorline_screenline() 111017ba07fSBram Moolenaar CheckScreendump 112017ba07fSBram Moolenaar CheckOption cursorlineopt 113c9e7e344SBram Moolenaar 114017ba07fSBram Moolenaar let filename='Xcursorline' 115017ba07fSBram Moolenaar let lines = [] 116017ba07fSBram Moolenaar 117017ba07fSBram Moolenaar let file_content =<< trim END 118017ba07fSBram Moolenaar 1 foooooooo ar einszwei drei vier fünf sechs sieben acht un zehn elf zwöfl dreizehn v ierzehn fünfzehn 119017ba07fSBram Moolenaar 2 foooooooo bar eins zwei drei vier fünf sechs sieben 120017ba07fSBram Moolenaar 3 foooooooo bar eins zwei drei vier fünf sechs sieben 121017ba07fSBram Moolenaar 4 foooooooo bar eins zwei drei vier fünf sechs sieben 122017ba07fSBram Moolenaar END 123017ba07fSBram Moolenaar let lines1 =<< trim END1 124017ba07fSBram Moolenaar set nocp 125017ba07fSBram Moolenaar set display=lastline 126017ba07fSBram Moolenaar set cursorlineopt=screenline cursorline nu wrap sbr=> 127017ba07fSBram Moolenaar hi CursorLineNr ctermfg=blue 128017ba07fSBram Moolenaar 25vsp 129017ba07fSBram Moolenaar END1 130017ba07fSBram Moolenaar let lines2 =<< trim END2 131017ba07fSBram Moolenaar call cursor(1,1) 132017ba07fSBram Moolenaar END2 133017ba07fSBram Moolenaar call extend(lines, lines1) 134017ba07fSBram Moolenaar call extend(lines, ["call append(0, ".. string(file_content).. ')']) 135017ba07fSBram Moolenaar call extend(lines, lines2) 136017ba07fSBram Moolenaar call writefile(lines, filename) 137017ba07fSBram Moolenaar " basic test 138017ba07fSBram Moolenaar let buf = RunVimInTerminal('-S '. filename, #{rows: 20}) 1396a2c5a7dSBram Moolenaar call TermWait(buf) 140017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_1', {}) 141017ba07fSBram Moolenaar call term_sendkeys(buf, "fagj") 1426a2c5a7dSBram Moolenaar call TermWait(buf) 143017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_2', {}) 144017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1456a2c5a7dSBram Moolenaar call TermWait(buf) 146017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_3', {}) 147017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1486a2c5a7dSBram Moolenaar call TermWait(buf) 149017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_4', {}) 150017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1516a2c5a7dSBram Moolenaar call TermWait(buf) 152017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_5', {}) 153017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1546a2c5a7dSBram Moolenaar call TermWait(buf) 155017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_6', {}) 156017ba07fSBram Moolenaar " test with set list and cursorlineopt containing number 157017ba07fSBram Moolenaar call term_sendkeys(buf, "gg0") 158017ba07fSBram Moolenaar call term_sendkeys(buf, ":set list cursorlineopt+=number listchars=space:-\<cr>") 159017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_7', {}) 160017ba07fSBram Moolenaar call term_sendkeys(buf, "fagj") 1616a2c5a7dSBram Moolenaar call TermWait(buf) 162017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_8', {}) 163017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1646a2c5a7dSBram Moolenaar call TermWait(buf) 165017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_9', {}) 166017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1676a2c5a7dSBram Moolenaar call TermWait(buf) 168017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_10', {}) 169017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1706a2c5a7dSBram Moolenaar call TermWait(buf) 171017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_11', {}) 172017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1736a2c5a7dSBram Moolenaar call TermWait(buf) 174017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_12', {}) 175017ba07fSBram Moolenaar if exists("+foldcolumn") && exists("+signcolumn") && exists("+breakindent") 176017ba07fSBram Moolenaar " test with set foldcolumn signcoloumn and breakindent 177017ba07fSBram Moolenaar call term_sendkeys(buf, "gg0") 178017ba07fSBram Moolenaar call term_sendkeys(buf, ":set breakindent foldcolumn=2 signcolumn=yes\<cr>") 179017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_13', {}) 180017ba07fSBram Moolenaar call term_sendkeys(buf, "fagj") 1816a2c5a7dSBram Moolenaar call TermWait(buf) 182017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_14', {}) 183017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1846a2c5a7dSBram Moolenaar call TermWait(buf) 185017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_15', {}) 186017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1876a2c5a7dSBram Moolenaar call TermWait(buf) 188017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_16', {}) 189017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1906a2c5a7dSBram Moolenaar call TermWait(buf) 191017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_17', {}) 192017ba07fSBram Moolenaar call term_sendkeys(buf, "gj") 1936a2c5a7dSBram Moolenaar call TermWait(buf) 194017ba07fSBram Moolenaar call VerifyScreenDump(buf, 'Test_'. filename. '_18', {}) 195*4f33bc20Szeertzjq call term_sendkeys(buf, ":set breakindent& foldcolumn& signcolumn&\<cr>") 196017ba07fSBram Moolenaar endif 197*4f33bc20Szeertzjq " showbreak should not be highlighted with CursorLine when 'number' is off 198*4f33bc20Szeertzjq call term_sendkeys(buf, "gg0") 199*4f33bc20Szeertzjq call term_sendkeys(buf, ":set list cursorlineopt=screenline listchars=space:-\<cr>") 200*4f33bc20Szeertzjq call term_sendkeys(buf, ":set nonumber\<cr>") 201*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_19', {}) 202*4f33bc20Szeertzjq call term_sendkeys(buf, "fagj") 203*4f33bc20Szeertzjq call TermWait(buf) 204*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_20', {}) 205*4f33bc20Szeertzjq call term_sendkeys(buf, "gj") 206*4f33bc20Szeertzjq call TermWait(buf) 207*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_21', {}) 208*4f33bc20Szeertzjq call term_sendkeys(buf, "gj") 209*4f33bc20Szeertzjq call TermWait(buf) 210*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_22', {}) 211*4f33bc20Szeertzjq call term_sendkeys(buf, "gj") 212*4f33bc20Szeertzjq call TermWait(buf) 213*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_23', {}) 214*4f33bc20Szeertzjq call term_sendkeys(buf, "gj") 215*4f33bc20Szeertzjq call TermWait(buf) 216*4f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_'. filename. '_24', {}) 217*4f33bc20Szeertzjq call term_sendkeys(buf, ":set list& cursorlineopt& listchars&\<cr>") 218017ba07fSBram Moolenaar 219017ba07fSBram Moolenaar call StopVimInTerminal(buf) 220017ba07fSBram Moolenaar call delete(filename) 221017ba07fSBram Moolenaarendfunc 2226d91bcb4SBram Moolenaar 223c9e7e344SBram Moolenaarfunc Test_cursorline_redraw() 224c9e7e344SBram Moolenaar CheckScreendump 225c9e7e344SBram Moolenaar CheckOption cursorlineopt 226c9e7e344SBram Moolenaar 227c9e7e344SBram Moolenaar let textlines =<< END 228c9e7e344SBram Moolenaar When the option is a list of flags, {value} must be 229c9e7e344SBram Moolenaar exactly as they appear in the option. Remove flags 230c9e7e344SBram Moolenaar one by one to avoid problems. 231c9e7e344SBram Moolenaar Also see |:set-args| above. 232c9e7e344SBram Moolenaar 233c9e7e344SBram MoolenaarThe {option} arguments to ":set" may be repeated. For example: > 234c9e7e344SBram Moolenaar :set ai nosi sw=3 ts=3 235c9e7e344SBram MoolenaarIf you make an error in one of the arguments, an error message will be given 236c9e7e344SBram Moolenaarand the following arguments will be ignored. 237c9e7e344SBram Moolenaar 238c9e7e344SBram Moolenaar *:set-verbose* 239c9e7e344SBram MoolenaarWhen 'verbose' is non-zero, displaying an option value will also tell where it 240c9e7e344SBram Moolenaarwas last set. Example: > 241c9e7e344SBram Moolenaar :verbose set shiftwidth cindent? 242c9e7e344SBram Moolenaar< shiftwidth=4 ~ 243c9e7e344SBram Moolenaar Last set from modeline line 1 ~ 244c9e7e344SBram Moolenaar cindent ~ 245c9e7e344SBram Moolenaar Last set from /usr/local/share/vim/vim60/ftplugin/c.vim line 30 ~ 246c9e7e344SBram MoolenaarThis is only done when specific option values are requested, not for ":verbose 247c9e7e344SBram Moolenaarset all" or ":verbose set" without an argument. 248c9e7e344SBram MoolenaarWhen the option was set by hand there is no "Last set" message. 249c9e7e344SBram MoolenaarWhen the option was set while executing a function, user command or 250c9e7e344SBram MoolenaarEND 251c9e7e344SBram Moolenaar call writefile(textlines, 'Xtextfile') 252c9e7e344SBram Moolenaar 253c9e7e344SBram Moolenaar let script =<< trim END 254c9e7e344SBram Moolenaar set cursorline scrolloff=2 255c9e7e344SBram Moolenaar normal 12G 256c9e7e344SBram Moolenaar END 257c9e7e344SBram Moolenaar call writefile(script, 'Xscript') 258c9e7e344SBram Moolenaar 259c9e7e344SBram Moolenaar let buf = RunVimInTerminal('-S Xscript Xtextfile', #{rows: 20, cols: 40}) 260c9e7e344SBram Moolenaar call VerifyScreenDump(buf, 'Test_cursorline_redraw_1', {}) 261c9e7e344SBram Moolenaar call term_sendkeys(buf, "zt") 262c9e7e344SBram Moolenaar call TermWait(buf) 263c9e7e344SBram Moolenaar call term_sendkeys(buf, "\<C-U>") 264c9e7e344SBram Moolenaar call VerifyScreenDump(buf, 'Test_cursorline_redraw_2', {}) 265c9e7e344SBram Moolenaar 266c9e7e344SBram Moolenaar call StopVimInTerminal(buf) 267c9e7e344SBram Moolenaar call delete('Xscript') 268c9e7e344SBram Moolenaar call delete('Xtextfile') 269c9e7e344SBram Moolenaarendfunc 270c9e7e344SBram Moolenaar 2716d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 272