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