1" Test for v:hlsearch 2 3function! Test_hlsearch() 4 new 5 call setline(1, repeat(['aaa'], 10)) 6 set hlsearch nolazyredraw 7 let r=[] 8 " redraw is needed to make hlsearch highlight the matches 9 exe "normal! /aaa\<CR>" | redraw 10 let r1 = screenattr(1, 1) 11 nohlsearch | redraw 12 call assert_notequal(r1, screenattr(1,1)) 13 let v:hlsearch=1 | redraw 14 call assert_equal(r1, screenattr(1,1)) 15 let v:hlsearch=0 | redraw 16 call assert_notequal(r1, screenattr(1,1)) 17 set hlsearch | redraw 18 call assert_equal(r1, screenattr(1,1)) 19 let v:hlsearch=0 | redraw 20 call assert_notequal(r1, screenattr(1,1)) 21 exe "normal! n" | redraw 22 call assert_equal(r1, screenattr(1,1)) 23 let v:hlsearch=0 | redraw 24 call assert_notequal(r1, screenattr(1,1)) 25 exe "normal! /\<CR>" | redraw 26 call assert_equal(r1, screenattr(1,1)) 27 set nohls 28 exe "normal! /\<CR>" | redraw 29 call assert_notequal(r1, screenattr(1,1)) 30 call assert_fails('let v:hlsearch=[]', 'E745') 31 call garbagecollect(1) 32 call getchar(1) 33 enew! 34endfunction 35 36func Test_hlsearch_hangs() 37 if !has('reltime') || !has('float') 38 return 39 endif 40 41 " This pattern takes a long time to match, it should timeout. 42 new 43 call setline(1, ['aaa', repeat('abc ', 1000), 'ccc']) 44 let start = reltime() 45 set hlsearch nolazyredraw redrawtime=101 46 let @/ = '\%#=1a*.*X\@<=b*' 47 redraw 48 let elapsed = reltimefloat(reltime(start)) 49 call assert_true(elapsed > 0.1) 50 call assert_true(elapsed < 1.0) 51 set nohlsearch redrawtime& 52 bwipe! 53endfunc 54