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 eins‍zwei 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