blob: c6aa3a2bf43498748df8a444209ec11bb5b4bb9a [file] [log] [blame]
Bram Moolenaar0aa398f2017-09-30 21:23:55 +02001" Tests for ":highlight" and highlighting.
2
3source view_util.vim
Bram Moolenaarc07ff5c2019-01-30 21:41:14 +01004source screendump.vim
Bram Moolenaar8c5a2782019-08-07 23:07:07 +02005source check.vim
Bram Moolenaar0aa398f2017-09-30 21:23:55 +02006
Bram Moolenaar75373f32017-08-07 22:02:30 +02007func Test_highlight()
8 " basic test if ":highlight" doesn't crash
9 highlight
10 hi Search
11
12 " test setting colors.
13 " test clearing one color and all doesn't generate error or warning
14 silent! hi NewGroup term=bold cterm=italic ctermfg=DarkBlue ctermbg=Grey gui= guifg=#00ff00 guibg=Cyan
15 silent! hi Group2 term= cterm=
16 hi Group3 term=underline cterm=bold
17
18 let res = split(execute("hi NewGroup"), "\n")[0]
19 " filter ctermfg and ctermbg, the numbers depend on the terminal
20 let res = substitute(res, 'ctermfg=\d*', 'ctermfg=2', '')
21 let res = substitute(res, 'ctermbg=\d*', 'ctermbg=3', '')
22 call assert_equal("NewGroup xxx term=bold cterm=italic ctermfg=2 ctermbg=3",
23 \ res)
24 call assert_equal("Group2 xxx cleared",
25 \ split(execute("hi Group2"), "\n")[0])
26 call assert_equal("Group3 xxx term=underline cterm=bold",
27 \ split(execute("hi Group3"), "\n")[0])
28
29 hi clear NewGroup
30 call assert_equal("NewGroup xxx cleared",
31 \ split(execute("hi NewGroup"), "\n")[0])
32 call assert_equal("Group2 xxx cleared",
33 \ split(execute("hi Group2"), "\n")[0])
34 hi Group2 NONE
35 call assert_equal("Group2 xxx cleared",
36 \ split(execute("hi Group2"), "\n")[0])
37 hi clear
38 call assert_equal("Group3 xxx cleared",
39 \ split(execute("hi Group3"), "\n")[0])
40 call assert_fails("hi Crash term='asdf", "E475:")
41endfunc
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020042
Bram Moolenaar1e115362019-01-09 23:01:02 +010043func HighlightArgs(name)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020044 return 'hi ' . substitute(split(execute('hi ' . a:name), '\n')[0], '\<xxx\>', '', '')
Bram Moolenaar1e115362019-01-09 23:01:02 +010045endfunc
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020046
Bram Moolenaar1e115362019-01-09 23:01:02 +010047func IsColorable()
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020048 return has('gui_running') || str2nr(&t_Co) >= 8
Bram Moolenaar1e115362019-01-09 23:01:02 +010049endfunc
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020050
Bram Moolenaar1e115362019-01-09 23:01:02 +010051func HiCursorLine()
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020052 let hiCursorLine = HighlightArgs('CursorLine')
53 if has('gui_running')
54 let guibg = matchstr(hiCursorLine, 'guibg=\w\+')
55 let hi_ul = 'hi CursorLine gui=underline guibg=NONE'
56 let hi_bg = 'hi CursorLine gui=NONE ' . guibg
57 else
58 let hi_ul = 'hi CursorLine cterm=underline ctermbg=NONE'
59 let hi_bg = 'hi CursorLine cterm=NONE ctermbg=Gray'
60 endif
61 return [hiCursorLine, hi_ul, hi_bg]
Bram Moolenaar1e115362019-01-09 23:01:02 +010062endfunc
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020063
Bram Moolenaar1e115362019-01-09 23:01:02 +010064func Check_lcs_eol_attrs(attrs, row, col)
Bram Moolenaar5ece3e32017-10-01 14:35:02 +020065 let save_lcs = &lcs
66 set list
67
68 call assert_equal(a:attrs, ScreenAttrs(a:row, a:col)[0])
69
70 set nolist
71 let &lcs = save_lcs
Bram Moolenaar1e115362019-01-09 23:01:02 +010072endfunc
Bram Moolenaar5ece3e32017-10-01 14:35:02 +020073
Bram Moolenaar0aa398f2017-09-30 21:23:55 +020074func Test_highlight_eol_with_cursorline()
75 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
76
77 call NewWindow('topleft 5', 20)
78 call setline(1, 'abcd')
79 call matchadd('Search', '\n')
80
81 " expected:
82 " 'abcd '
83 " ^^^^ ^^^^^ no highlight
84 " ^ 'Search' highlight
85 let attrs0 = ScreenAttrs(1, 10)[0]
86 call assert_equal(repeat([attrs0[0]], 4), attrs0[0:3])
87 call assert_equal(repeat([attrs0[0]], 5), attrs0[5:9])
88 call assert_notequal(attrs0[0], attrs0[4])
89
90 setlocal cursorline
91
92 " underline
93 exe hi_ul
94
95 " expected:
96 " 'abcd '
97 " ^^^^ underline
Bram Moolenaar5ece3e32017-10-01 14:35:02 +020098 " ^ 'Search' highlight with underline
99 " ^^^^^ underline
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200100 let attrs = ScreenAttrs(1, 10)[0]
101 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
102 call assert_equal([attrs[4]] + repeat([attrs[5]], 5), attrs[4:9])
103 call assert_notequal(attrs[0], attrs[4])
104 call assert_notequal(attrs[4], attrs[5])
105 call assert_notequal(attrs0[0], attrs[0])
106 call assert_notequal(attrs0[4], attrs[4])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200107 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200108
109 if IsColorable()
110 " bg-color
111 exe hi_bg
112
113 " expected:
114 " 'abcd '
115 " ^^^^ bg-color of 'CursorLine'
116 " ^ 'Search' highlight
117 " ^^^^^ bg-color of 'CursorLine'
118 let attrs = ScreenAttrs(1, 10)[0]
119 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
120 call assert_equal(repeat([attrs[5]], 5), attrs[5:9])
121 call assert_equal(attrs0[4], attrs[4])
122 call assert_notequal(attrs[0], attrs[4])
123 call assert_notequal(attrs[4], attrs[5])
124 call assert_notequal(attrs0[0], attrs[0])
125 call assert_notequal(attrs0[5], attrs[5])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200126 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200127 endif
128
129 call CloseWindow()
130 exe hiCursorLine
131endfunc
132
133func Test_highlight_eol_with_cursorline_vertsplit()
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200134 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
135
136 call NewWindow('topleft 5', 5)
137 call setline(1, 'abcd')
138 call matchadd('Search', '\n')
139
140 let expected = "abcd |abcd "
141 let actual = ScreenLines(1, 15)[0]
142 call assert_equal(expected, actual)
143
144 " expected:
145 " 'abcd |abcd '
146 " ^^^^ ^^^^^^^^^ no highlight
147 " ^ 'Search' highlight
148 " ^ 'VertSplit' highlight
149 let attrs0 = ScreenAttrs(1, 15)[0]
150 call assert_equal(repeat([attrs0[0]], 4), attrs0[0:3])
151 call assert_equal(repeat([attrs0[0]], 9), attrs0[6:14])
152 call assert_notequal(attrs0[0], attrs0[4])
153 call assert_notequal(attrs0[0], attrs0[5])
154 call assert_notequal(attrs0[4], attrs0[5])
155
156 setlocal cursorline
157
158 " expected:
159 " 'abcd |abcd '
160 " ^^^^ underline
161 " ^ 'Search' highlight with underline
162 " ^ 'VertSplit' highlight
163 " ^^^^^^^^^ no highlight
164
165 " underline
166 exe hi_ul
167
168 let actual = ScreenLines(1, 15)[0]
169 call assert_equal(expected, actual)
170
171 let attrs = ScreenAttrs(1, 15)[0]
172 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
173 call assert_equal(repeat([attrs[6]], 9), attrs[6:14])
174 call assert_equal(attrs0[5:14], attrs[5:14])
175 call assert_notequal(attrs[0], attrs[4])
176 call assert_notequal(attrs[0], attrs[5])
177 call assert_notequal(attrs[0], attrs[6])
178 call assert_notequal(attrs[4], attrs[5])
179 call assert_notequal(attrs[5], attrs[6])
180 call assert_notequal(attrs0[0], attrs[0])
181 call assert_notequal(attrs0[4], attrs[4])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200182 call Check_lcs_eol_attrs(attrs, 1, 15)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200183
184 if IsColorable()
185 " bg-color
186 exe hi_bg
187
188 let actual = ScreenLines(1, 15)[0]
189 call assert_equal(expected, actual)
190
191 let attrs = ScreenAttrs(1, 15)[0]
192 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
193 call assert_equal(repeat([attrs[6]], 9), attrs[6:14])
194 call assert_equal(attrs0[5:14], attrs[5:14])
195 call assert_notequal(attrs[0], attrs[4])
196 call assert_notequal(attrs[0], attrs[5])
197 call assert_notequal(attrs[0], attrs[6])
198 call assert_notequal(attrs[4], attrs[5])
199 call assert_notequal(attrs[5], attrs[6])
200 call assert_notequal(attrs0[0], attrs[0])
201 call assert_equal(attrs0[4], attrs[4])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200202 call Check_lcs_eol_attrs(attrs, 1, 15)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200203 endif
204
205 call CloseWindow()
206 exe hiCursorLine
207endfunc
208
209func Test_highlight_eol_with_cursorline_rightleft()
210 if !has('rightleft')
211 return
212 endif
213
214 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
215
216 call NewWindow('topleft 5', 10)
217 setlocal rightleft
218 call setline(1, 'abcd')
219 call matchadd('Search', '\n')
220 let attrs0 = ScreenAttrs(1, 10)[0]
221
222 setlocal cursorline
223
224 " underline
225 exe hi_ul
226
227 " expected:
228 " ' dcba'
229 " ^^^^ underline
230 " ^ 'Search' highlight with underline
231 " ^^^^^ underline
232 let attrs = ScreenAttrs(1, 10)[0]
233 call assert_equal(repeat([attrs[9]], 4), attrs[6:9])
234 call assert_equal(repeat([attrs[4]], 5) + [attrs[5]], attrs[0:5])
235 call assert_notequal(attrs[9], attrs[5])
236 call assert_notequal(attrs[4], attrs[5])
237 call assert_notequal(attrs0[9], attrs[9])
238 call assert_notequal(attrs0[5], attrs[5])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200239 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200240
241 if IsColorable()
242 " bg-color
243 exe hi_bg
244
245 " expected:
246 " ' dcba'
247 " ^^^^ bg-color of 'CursorLine'
248 " ^ 'Search' highlight
249 " ^^^^^ bg-color of 'CursorLine'
250 let attrs = ScreenAttrs(1, 10)[0]
251 call assert_equal(repeat([attrs[9]], 4), attrs[6:9])
252 call assert_equal(repeat([attrs[4]], 5), attrs[0:4])
253 call assert_equal(attrs0[5], attrs[5])
254 call assert_notequal(attrs[9], attrs[5])
255 call assert_notequal(attrs[5], attrs[4])
256 call assert_notequal(attrs0[9], attrs[9])
257 call assert_notequal(attrs0[4], attrs[4])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200258 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200259 endif
260
261 call CloseWindow()
262 exe hiCursorLine
263endfunc
264
265func Test_highlight_eol_with_cursorline_linewrap()
266 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
267
268 call NewWindow('topleft 5', 10)
269 call setline(1, [repeat('a', 51) . 'bcd', ''])
270 call matchadd('Search', '\n')
271
272 setlocal wrap
273 normal! gg$
274 let attrs0 = ScreenAttrs(5, 10)[0]
275 setlocal cursorline
276
277 " underline
278 exe hi_ul
279
280 " expected:
281 " 'abcd '
282 " ^^^^ underline
283 " ^ 'Search' highlight with underline
284 " ^^^^^ underline
285 let attrs = ScreenAttrs(5, 10)[0]
286 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
287 call assert_equal([attrs[4]] + repeat([attrs[5]], 5), attrs[4:9])
288 call assert_notequal(attrs[0], attrs[4])
289 call assert_notequal(attrs[4], attrs[5])
290 call assert_notequal(attrs0[0], attrs[0])
291 call assert_notequal(attrs0[4], attrs[4])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200292 call Check_lcs_eol_attrs(attrs, 5, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200293
294 if IsColorable()
295 " bg-color
296 exe hi_bg
297
298 " expected:
299 " 'abcd '
300 " ^^^^ bg-color of 'CursorLine'
301 " ^ 'Search' highlight
302 " ^^^^^ bg-color of 'CursorLine'
303 let attrs = ScreenAttrs(5, 10)[0]
304 call assert_equal(repeat([attrs[0]], 4), attrs[0:3])
305 call assert_equal(repeat([attrs[5]], 5), attrs[5:9])
306 call assert_equal(attrs0[4], attrs[4])
307 call assert_notequal(attrs[0], attrs[4])
308 call assert_notequal(attrs[4], attrs[5])
309 call assert_notequal(attrs0[0], attrs[0])
310 call assert_notequal(attrs0[5], attrs[5])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200311 call Check_lcs_eol_attrs(attrs, 5, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200312 endif
313
314 setlocal nocursorline nowrap
315 normal! gg$
316 let attrs0 = ScreenAttrs(1, 10)[0]
317 setlocal cursorline
318
319 " underline
320 exe hi_ul
321
322 " expected:
323 " 'aaabcd '
324 " ^^^^^^ underline
325 " ^ 'Search' highlight with underline
326 " ^^^ underline
327 let attrs = ScreenAttrs(1, 10)[0]
328 call assert_equal(repeat([attrs[0]], 6), attrs[0:5])
329 call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
330 call assert_notequal(attrs[0], attrs[6])
331 call assert_notequal(attrs[6], attrs[7])
332 call assert_notequal(attrs0[0], attrs[0])
333 call assert_notequal(attrs0[6], attrs[6])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200334 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200335
336 if IsColorable()
337 " bg-color
338 exe hi_bg
339
340 " expected:
341 " 'aaabcd '
342 " ^^^^^^ bg-color of 'CursorLine'
343 " ^ 'Search' highlight
344 " ^^^ bg-color of 'CursorLine'
345 let attrs = ScreenAttrs(1, 10)[0]
346 call assert_equal(repeat([attrs[0]], 6), attrs[0:5])
347 call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
348 call assert_equal(attrs0[6], attrs[6])
349 call assert_notequal(attrs[0], attrs[6])
350 call assert_notequal(attrs[6], attrs[7])
351 call assert_notequal(attrs0[0], attrs[0])
352 call assert_notequal(attrs0[7], attrs[7])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200353 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200354 endif
355
356 call CloseWindow()
357 exe hiCursorLine
358endfunc
359
360func Test_highlight_eol_with_cursorline_sign()
361 if !has('signs')
362 return
363 endif
364
365 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
366
367 call NewWindow('topleft 5', 10)
368 call setline(1, 'abcd')
369 call matchadd('Search', '\n')
370
371 sign define Sign text=>>
372 exe 'sign place 1 line=1 name=Sign buffer=' . bufnr('')
373 let attrs0 = ScreenAttrs(1, 10)[0]
374 setlocal cursorline
375
376 " underline
377 exe hi_ul
378
379 " expected:
380 " '>>abcd '
381 " ^^ sign
382 " ^^^^ underline
383 " ^ 'Search' highlight with underline
384 " ^^^ underline
385 let attrs = ScreenAttrs(1, 10)[0]
386 call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
387 call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
388 call assert_notequal(attrs[2], attrs[6])
389 call assert_notequal(attrs[6], attrs[7])
390 call assert_notequal(attrs0[2], attrs[2])
391 call assert_notequal(attrs0[6], attrs[6])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200392 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200393
394 if IsColorable()
395 " bg-color
396 exe hi_bg
397
398 " expected:
399 " '>>abcd '
400 " ^^ sign
401 " ^^^^ bg-color of 'CursorLine'
402 " ^ 'Search' highlight
403 " ^^^ bg-color of 'CursorLine'
404 let attrs = ScreenAttrs(1, 10)[0]
405 call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
406 call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
407 call assert_equal(attrs0[6], attrs[6])
408 call assert_notequal(attrs[2], attrs[6])
409 call assert_notequal(attrs[6], attrs[7])
410 call assert_notequal(attrs0[2], attrs[2])
411 call assert_notequal(attrs0[7], attrs[7])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200412 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200413 endif
414
415 sign unplace 1
416 call CloseWindow()
417 exe hiCursorLine
418endfunc
419
420func Test_highlight_eol_with_cursorline_breakindent()
421 if !has('linebreak')
422 return
423 endif
424
425 let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine()
426
427 call NewWindow('topleft 5', 10)
Bram Moolenaaree857022019-11-09 23:26:40 +0100428 set showbreak=xxx
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200429 setlocal breakindent breakindentopt=min:0,shift:1 showbreak=>
430 call setline(1, ' ' . repeat('a', 9) . 'bcd')
431 call matchadd('Search', '\n')
432 let attrs0 = ScreenAttrs(2, 10)[0]
433 setlocal cursorline
434
435 " underline
436 exe hi_ul
437
438 " expected:
439 " ' >bcd '
440 " ^^^ breakindent and showbreak
441 " ^^^ underline
442 " ^ 'Search' highlight with underline
443 " ^^^ underline
444 let attrs = ScreenAttrs(2, 10)[0]
445 call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
446 call assert_equal(repeat([attrs[3]], 3), attrs[3:5])
447 call assert_equal([attrs[6]] + repeat([attrs[7]], 3), attrs[6:9])
448 call assert_equal(attrs0[0], attrs[0])
449 call assert_notequal(attrs[0], attrs[2])
450 call assert_notequal(attrs[2], attrs[3])
451 call assert_notequal(attrs[3], attrs[6])
452 call assert_notequal(attrs[6], attrs[7])
453 call assert_notequal(attrs0[2], attrs[2])
454 call assert_notequal(attrs0[3], attrs[3])
455 call assert_notequal(attrs0[6], attrs[6])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200456 call Check_lcs_eol_attrs(attrs, 2, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200457
458 if IsColorable()
459 " bg-color
460 exe hi_bg
461
462 " expected:
463 " ' >bcd '
464 " ^^^ breakindent and showbreak
465 " ^^^ bg-color of 'CursorLine'
466 " ^ 'Search' highlight
467 " ^^^ bg-color of 'CursorLine'
468 let attrs = ScreenAttrs(2, 10)[0]
469 call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
470 call assert_equal(repeat([attrs[3]], 3), attrs[3:5])
471 call assert_equal(repeat([attrs[7]], 3), attrs[7:9])
472 call assert_equal(attrs0[0], attrs[0])
473 call assert_equal(attrs0[6], attrs[6])
474 call assert_notequal(attrs[0], attrs[2])
475 call assert_notequal(attrs[2], attrs[3])
476 call assert_notequal(attrs[3], attrs[6])
477 call assert_notequal(attrs[6], attrs[7])
478 call assert_notequal(attrs0[2], attrs[2])
479 call assert_notequal(attrs0[3], attrs[3])
480 call assert_notequal(attrs0[7], attrs[7])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200481 call Check_lcs_eol_attrs(attrs, 2, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200482 endif
483
484 call CloseWindow()
485 set showbreak=
Bram Moolenaaree857022019-11-09 23:26:40 +0100486 setlocal showbreak=
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200487 exe hiCursorLine
488endfunc
489
490func Test_highlight_eol_on_diff()
491 call setline(1, ['abcd', ''])
492 call matchadd('Search', '\n')
493 let attrs0 = ScreenAttrs(1, 10)[0]
494
495 diffthis
496 botright new
497 diffthis
498
499 " expected:
500 " ' abcd '
501 " ^^ sign
502 " ^^^^ ^^^ 'DiffAdd' highlight
503 " ^ 'Search' highlight
504 let attrs = ScreenAttrs(1, 10)[0]
505 call assert_equal(repeat([attrs[0]], 2), attrs[0:1])
506 call assert_equal(repeat([attrs[2]], 4), attrs[2:5])
507 call assert_equal(repeat([attrs[2]], 3), attrs[7:9])
508 call assert_equal(attrs0[4], attrs[6])
509 call assert_notequal(attrs[0], attrs[2])
510 call assert_notequal(attrs[0], attrs[6])
511 call assert_notequal(attrs[2], attrs[6])
Bram Moolenaar5ece3e32017-10-01 14:35:02 +0200512 call Check_lcs_eol_attrs(attrs, 1, 10)
Bram Moolenaar0aa398f2017-09-30 21:23:55 +0200513
514 bwipe!
515 diffoff
516endfunc
Bram Moolenaarf708ac52018-03-12 21:48:32 +0100517
518func Test_termguicolors()
519 if !exists('+termguicolors')
520 return
521 endif
Bram Moolenaar310c32e2019-11-29 23:15:25 +0100522 if has('vtp') && !has('vcon') && !has('gui_running')
Bram Moolenaarff1e8792018-03-12 22:16:37 +0100523 " Win32: 'guicolors' doesn't work without virtual console.
524 call assert_fails('set termguicolors', 'E954:')
525 return
526 endif
Bram Moolenaarf708ac52018-03-12 21:48:32 +0100527
528 " Basic test that setting 'termguicolors' works with one color.
529 set termguicolors
530 redraw
531 set t_Co=1
532 redraw
533 set t_Co=0
534 redraw
535endfunc
Bram Moolenaarc07ff5c2019-01-30 21:41:14 +0100536
537func Test_cursorline_after_yank()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200538 CheckScreendump
Bram Moolenaarc07ff5c2019-01-30 21:41:14 +0100539
540 call writefile([
541 \ 'set cul rnu',
542 \ 'call setline(1, ["","1","2","3",""])',
543 \ ], 'Xtest_cursorline_yank')
544 let buf = RunVimInTerminal('-S Xtest_cursorline_yank', {'rows': 8})
545 call term_wait(buf)
546 call term_sendkeys(buf, "Gy3k")
547 call term_wait(buf)
548 call term_sendkeys(buf, "jj")
549
550 call VerifyScreenDump(buf, 'Test_cursorline_yank_01', {})
551
552 " clean up
553 call StopVimInTerminal(buf)
554 call delete('Xtest_cursorline_yank')
555endfunc
Bram Moolenaar8156ed32019-03-09 11:46:15 +0100556
Bram Moolenaarfca068b2019-09-08 14:07:47 +0200557" test for issue #4862
558func Test_put_before_cursorline()
559 new
560 only!
561 call setline(1, 'A')
562 redraw
563 let std_attr = screenattr(1, 1)
564 set cursorline
565 redraw
566 let cul_attr = screenattr(1, 1)
567 normal yyP
568 redraw
569 " Line 1 has cursor so it should be highlighted with CursorLine.
570 call assert_equal(cul_attr, screenattr(1, 1))
571 " And CursorLine highlighting from the second line should be gone.
572 call assert_equal(std_attr, screenattr(2, 1))
573 set nocursorline
574 bwipe!
575endfunc
576
Bram Moolenaar8156ed32019-03-09 11:46:15 +0100577func Test_cursorline_with_visualmode()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200578 CheckScreendump
Bram Moolenaar8156ed32019-03-09 11:46:15 +0100579
580 call writefile([
581 \ 'set cul',
582 \ 'call setline(1, repeat(["abc"], 50))',
583 \ ], 'Xtest_cursorline_with_visualmode')
584 let buf = RunVimInTerminal('-S Xtest_cursorline_with_visualmode', {'rows': 12})
585 call term_wait(buf)
586 call term_sendkeys(buf, "V\<C-f>kkkjk")
587
588 call VerifyScreenDump(buf, 'Test_cursorline_with_visualmode_01', {})
589
590 " clean up
591 call StopVimInTerminal(buf)
592 call delete('Xtest_cursorline_with_visualmode')
593endfunc
Bram Moolenaarf90b6e02019-05-09 19:26:38 +0200594
Bram Moolenaar193ffd12019-05-25 22:57:30 +0200595func Test_wincolor()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200596 CheckScreendump
Bram Moolenaar193ffd12019-05-25 22:57:30 +0200597
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200598 let lines =<< trim END
599 set cursorline cursorcolumn rnu
Bram Moolenaar053f7122019-09-23 22:17:15 +0200600 call setline(1, ["","1111111111","22222222222","3 here 3","","the cat is out of the bag"])
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200601 set wincolor=Pmenu
Bram Moolenaar053f7122019-09-23 22:17:15 +0200602 hi CatLine guifg=green ctermfg=green
603 hi Reverse gui=reverse cterm=reverse
604 syn match CatLine /^the.*/
605 call prop_type_add("foo", {"highlight": "Reverse", "combine": 1})
606 call prop_add(6, 12, {"type": "foo", "end_col": 15})
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200607 /here
608 END
609 call writefile(lines, 'Xtest_wincolor')
Bram Moolenaar193ffd12019-05-25 22:57:30 +0200610 let buf = RunVimInTerminal('-S Xtest_wincolor', {'rows': 8})
611 call term_wait(buf)
612 call term_sendkeys(buf, "2G5lvj")
613 call term_wait(buf)
614
615 call VerifyScreenDump(buf, 'Test_wincolor_01', {})
616
617 " clean up
618 call term_sendkeys(buf, "\<Esc>")
619 call StopVimInTerminal(buf)
620 call delete('Xtest_wincolor')
621endfunc
622
Bram Moolenaar010ee962019-09-25 20:37:36 +0200623func Test_colorcolumn()
624 CheckScreendump
625
626 " check that setting 'colorcolumn' when entering a buffer works
627 let lines =<< trim END
628 split
629 edit X
630 call setline(1, ["1111111111","22222222222","3333333333"])
631 set nomodified
632 set colorcolumn=3,9
633 set number cursorline cursorlineopt=number
634 wincmd w
635 buf X
636 END
637 call writefile(lines, 'Xtest_colorcolumn')
638 let buf = RunVimInTerminal('-S Xtest_colorcolumn', {'rows': 10})
639 call term_sendkeys(buf, ":\<CR>")
640 call term_wait(buf)
641 call VerifyScreenDump(buf, 'Test_colorcolumn_1', {})
642
643 " clean up
644 call StopVimInTerminal(buf)
645 call delete('Xtest_colorcolumn')
646endfunc
647
Bram Moolenaar6b528fa2019-05-09 20:07:33 +0200648" This test must come before the Test_cursorline test, as it appears this
649" defines the Normal highlighting group anyway.
Bram Moolenaarf90b6e02019-05-09 19:26:38 +0200650func Test_1_highlight_Normalgroup_exists()
Bram Moolenaar435f9f02019-07-03 21:40:16 +0200651 let hlNormal = HighlightArgs('Normal')
652 if !has('gui_running')
Bram Moolenaar6b528fa2019-05-09 20:07:33 +0200653 call assert_match('hi Normal\s*clear', hlNormal)
Bram Moolenaar435f9f02019-07-03 21:40:16 +0200654 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
655 " expect is DEFAULT_FONT of gui_gtk_x11.c
656 call assert_match('hi Normal\s*font=Monospace 10', hlNormal)
657 elseif has('gui_motif') || has('gui_athena')
658 " expect is DEFAULT_FONT of gui_x11.c
659 call assert_match('hi Normal\s*font=7x13', hlNormal)
660 elseif has('win32')
661 " expect any font
662 call assert_match('hi Normal\s*font=.*', hlNormal)
Bram Moolenaar6b528fa2019-05-09 20:07:33 +0200663 endif
Bram Moolenaarf90b6e02019-05-09 19:26:38 +0200664endfunc
Bram Moolenaar548be7f2019-06-29 03:42:42 +0200665
666function Test_no_space_before_xxx()
667 let l:org_columns = &columns
668 set columns=17
669 let l:hi_StatusLineTermNC = join(split(execute('hi StatusLineTermNC')))
670 call assert_match('StatusLineTermNC xxx', l:hi_StatusLineTermNC)
671 let &columns = l:org_columns
672endfunction