19dfa3139SBram Moolenaar" Tests for search_stats, when "S" is not in 'shortmess'
29dfa3139SBram Moolenaar
30f63ed33SBram Moolenaarsource check.vim
40f63ed33SBram Moolenaarsource screendump.vim
5c7a10b35SBram Moolenaar
60f63ed33SBram Moolenaarfunc Test_search_stat()
79dfa3139SBram Moolenaar  new
89dfa3139SBram Moolenaar  set shortmess-=S
99ce3fa82SBram Moolenaar  " Append 50 lines with text to search for, "foobar" appears 20 times
109dfa3139SBram Moolenaar  call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10))
119dfa3139SBram Moolenaar
129dfa3139SBram Moolenaar  call cursor(1, 1)
13e8f5ec0dSBram Moolenaar
14e8f5ec0dSBram Moolenaar  " searchcount() returns an empty dictionary when previous pattern was not set
15e8f5ec0dSBram Moolenaar  call assert_equal({}, searchcount(#{pattern: ''}))
16e8f5ec0dSBram Moolenaar  " but setting @/ should also work (even 'n' nor 'N' was executed)
17e8f5ec0dSBram Moolenaar  " recompute the count when the last position is different.
18e8f5ec0dSBram Moolenaar  call assert_equal(
19e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 40, incomplete: 0, maxcount: 99},
20e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'foo'}))
21e8f5ec0dSBram Moolenaar  call assert_equal(
22e8f5ec0dSBram Moolenaar    \ #{current: 0, exact_match: 0, total: 10, incomplete: 0, maxcount: 99},
23e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar'}))
24e8f5ec0dSBram Moolenaar  call assert_equal(
25e8f5ec0dSBram Moolenaar    \ #{current: 0, exact_match: 0, total: 10, incomplete: 0, maxcount: 99},
26e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [2, 1, 0]}))
27e8f5ec0dSBram Moolenaar  call assert_equal(
28e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 10, incomplete: 0, maxcount: 99},
29e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [3, 1, 0]}))
3057f75a5aSBram Moolenaar  " on last char of match
3157f75a5aSBram Moolenaar  call assert_equal(
3257f75a5aSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 10, incomplete: 0, maxcount: 99},
3357f75a5aSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [3, 9, 0]}))
3457f75a5aSBram Moolenaar  " on char after match
3557f75a5aSBram Moolenaar  call assert_equal(
3657f75a5aSBram Moolenaar    \ #{current: 1, exact_match: 0, total: 10, incomplete: 0, maxcount: 99},
3757f75a5aSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [3, 10, 0]}))
38e8f5ec0dSBram Moolenaar  call assert_equal(
39e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 0, total: 10, incomplete: 0, maxcount: 99},
40e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [4, 1, 0]}))
41e8f5ec0dSBram Moolenaar  call assert_equal(
42e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 0, total: 2, incomplete: 2, maxcount: 1},
43e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', pos: [4, 1, 0], maxcount: 1}))
44e8f5ec0dSBram Moolenaar  call assert_equal(
45e8f5ec0dSBram Moolenaar    \ #{current: 0, exact_match: 0, total: 2, incomplete: 2, maxcount: 1},
46e8f5ec0dSBram Moolenaar    \ searchcount(#{pattern: 'fooooobar', maxcount: 1}))
47e8f5ec0dSBram Moolenaar
48e8f5ec0dSBram Moolenaar  " match at second line
49984f031fSBram Moolenaar  let messages_before = execute('messages')
509dfa3139SBram Moolenaar  let @/ = 'fo*\(bar\?\)\?'
519dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
529dfa3139SBram Moolenaar  let stat = '\[2/50\]'
539dfa3139SBram Moolenaar  let pat = escape(@/, '()*?'). '\s\+'
549dfa3139SBram Moolenaar  call assert_match(pat .. stat, g:a)
55e8f5ec0dSBram Moolenaar  call assert_equal(
56e8f5ec0dSBram Moolenaar    \ #{current: 2, exact_match: 1, total: 50, incomplete: 0, maxcount: 99},
57e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: 0}))
58984f031fSBram Moolenaar  " didn't get added to message history
59984f031fSBram Moolenaar  call assert_equal(messages_before, execute('messages'))
609dfa3139SBram Moolenaar
61984f031fSBram Moolenaar  " Match at last line
629dfa3139SBram Moolenaar  call cursor(line('$')-2, 1)
639dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
649dfa3139SBram Moolenaar  let stat = '\[50/50\]'
659dfa3139SBram Moolenaar  call assert_match(pat .. stat, g:a)
66e8f5ec0dSBram Moolenaar  call assert_equal(
67e8f5ec0dSBram Moolenaar    \ #{current: 50, exact_match: 1, total: 50, incomplete: 0, maxcount: 99},
68e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: 0}))
699dfa3139SBram Moolenaar
70984f031fSBram Moolenaar  " No search stat
719dfa3139SBram Moolenaar  set shortmess+=S
729dfa3139SBram Moolenaar  call cursor(1, 1)
739dfa3139SBram Moolenaar  let stat = '\[2/50\]'
749dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
759dfa3139SBram Moolenaar  call assert_notmatch(pat .. stat, g:a)
76e8f5ec0dSBram Moolenaar  " n does not update search stat
77e8f5ec0dSBram Moolenaar  call assert_equal(
78e8f5ec0dSBram Moolenaar    \ #{current: 50, exact_match: 1, total: 50, incomplete: 0, maxcount: 99},
79e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: 0}))
80e8f5ec0dSBram Moolenaar  call assert_equal(
81e8f5ec0dSBram Moolenaar    \ #{current: 2, exact_match: 1, total: 50, incomplete: 0, maxcount: 99},
82e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: v:true}))
839dfa3139SBram Moolenaar  set shortmess-=S
849dfa3139SBram Moolenaar
85984f031fSBram Moolenaar  " Many matches
869dfa3139SBram Moolenaar  call cursor(line('$')-2, 1)
879dfa3139SBram Moolenaar  let @/ = '.'
889dfa3139SBram Moolenaar  let pat = escape(@/, '()*?'). '\s\+'
899dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
909dfa3139SBram Moolenaar  let stat = '\[>99/>99\]'
919dfa3139SBram Moolenaar  call assert_match(pat .. stat, g:a)
92e8f5ec0dSBram Moolenaar  call assert_equal(
93e8f5ec0dSBram Moolenaar    \ #{current: 100, exact_match: 0, total: 100, incomplete: 2, maxcount: 99},
94e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: 0}))
95e8f5ec0dSBram Moolenaar  call assert_equal(
96e8f5ec0dSBram Moolenaar    \ #{current: 272, exact_match: 1, total: 280, incomplete: 0, maxcount: 0},
97ea6561afSBram Moolenaar    \ searchcount(#{recompute: v:true, maxcount: 0, timeout: 200}))
98e8f5ec0dSBram Moolenaar  call assert_equal(
99e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 280, incomplete: 0, maxcount: 0},
100ea6561afSBram Moolenaar    \ searchcount(#{recompute: 1, maxcount: 0, pos: [1, 1, 0], timeout: 200}))
101dc6855afSBram Moolenaar  call cursor(line('$'), 1)
102dc6855afSBram Moolenaar  let g:a = execute(':unsilent :norm! n')
10316b58ae9SBram Moolenaar  let stat = 'W \[1/>99\]'
104dc6855afSBram Moolenaar  call assert_match(pat .. stat, g:a)
105e8f5ec0dSBram Moolenaar  call assert_equal(
106e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 100, incomplete: 2, maxcount: 99},
107e8f5ec0dSBram Moolenaar    \ searchcount(#{recompute: 0}))
108e8f5ec0dSBram Moolenaar  call assert_equal(
109e8f5ec0dSBram Moolenaar    \ #{current: 1, exact_match: 1, total: 280, incomplete: 0, maxcount: 0},
110ea6561afSBram Moolenaar    \ searchcount(#{recompute: 1, maxcount: 0, timeout: 200}))
111e8f5ec0dSBram Moolenaar  call assert_equal(
112e8f5ec0dSBram Moolenaar    \ #{current: 271, exact_match: 1, total: 280, incomplete: 0, maxcount: 0},
113ea6561afSBram Moolenaar    \ searchcount(#{recompute: 1, maxcount: 0, pos: [line('$')-2, 1, 0], timeout: 200}))
1149dfa3139SBram Moolenaar
115984f031fSBram Moolenaar  " Many matches
1169dfa3139SBram Moolenaar  call cursor(1, 1)
1179dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
1189dfa3139SBram Moolenaar  let stat = '\[2/>99\]'
1199dfa3139SBram Moolenaar  call assert_match(pat .. stat, g:a)
120dc6855afSBram Moolenaar  call cursor(1, 1)
121dc6855afSBram Moolenaar  let g:a = execute(':unsilent :norm! N')
12216b58ae9SBram Moolenaar  let stat = 'W \[>99/>99\]'
123dc6855afSBram Moolenaar  call assert_match(pat .. stat, g:a)
1249dfa3139SBram Moolenaar
125984f031fSBram Moolenaar  " right-left
1269dfa3139SBram Moolenaar  if exists("+rightleft")
1279dfa3139SBram Moolenaar    set rl
1289dfa3139SBram Moolenaar    call cursor(1,1)
1299dfa3139SBram Moolenaar    let @/ = 'foobar'
1309dfa3139SBram Moolenaar    let pat = 'raboof/\s\+'
1319dfa3139SBram Moolenaar    let g:a = execute(':unsilent :norm! n')
1329dfa3139SBram Moolenaar    let stat = '\[20/2\]'
1339dfa3139SBram Moolenaar    call assert_match(pat .. stat, g:a)
1349dfa3139SBram Moolenaar    set norl
1359dfa3139SBram Moolenaar  endif
1369dfa3139SBram Moolenaar
137984f031fSBram Moolenaar  " right-left bottom
1389dfa3139SBram Moolenaar  if exists("+rightleft")
1399dfa3139SBram Moolenaar    set rl
1409dfa3139SBram Moolenaar    call cursor('$',1)
1419dfa3139SBram Moolenaar    let pat = 'raboof?\s\+'
1429dfa3139SBram Moolenaar    let g:a = execute(':unsilent :norm! N')
1439dfa3139SBram Moolenaar    let stat = '\[20/20\]'
1449dfa3139SBram Moolenaar    call assert_match(pat .. stat, g:a)
1459dfa3139SBram Moolenaar    set norl
1469dfa3139SBram Moolenaar  endif
1479dfa3139SBram Moolenaar
148984f031fSBram Moolenaar  " right-left back at top
1499dfa3139SBram Moolenaar  if exists("+rightleft")
1509dfa3139SBram Moolenaar    set rl
1519dfa3139SBram Moolenaar    call cursor('$',1)
1529dfa3139SBram Moolenaar    let pat = 'raboof/\s\+'
1539dfa3139SBram Moolenaar    let g:a = execute(':unsilent :norm! n')
15416b58ae9SBram Moolenaar    let stat = 'W \[20/1\]'
1559dfa3139SBram Moolenaar    call assert_match(pat .. stat, g:a)
1569dfa3139SBram Moolenaar    call assert_match('search hit BOTTOM, continuing at TOP', g:a)
1579dfa3139SBram Moolenaar    set norl
1589dfa3139SBram Moolenaar  endif
1599dfa3139SBram Moolenaar
160984f031fSBram Moolenaar  " normal, back at bottom
1619dfa3139SBram Moolenaar  call cursor(1,1)
1629dfa3139SBram Moolenaar  let @/ = 'foobar'
1639dfa3139SBram Moolenaar  let pat = '?foobar\s\+'
1649dfa3139SBram Moolenaar  let g:a = execute(':unsilent :norm! N')
16516b58ae9SBram Moolenaar  let stat = 'W \[20/20\]'
1669dfa3139SBram Moolenaar  call assert_match(pat .. stat, g:a)
1679dfa3139SBram Moolenaar  call assert_match('search hit TOP, continuing at BOTTOM', g:a)
16816b58ae9SBram Moolenaar  call assert_match('W \[20/20\]', Screenline(&lines))
1699dfa3139SBram Moolenaar
170984f031fSBram Moolenaar  " normal, no match
1719dfa3139SBram Moolenaar  call cursor(1,1)
1729dfa3139SBram Moolenaar  let @/ = 'zzzzzz'
1739dfa3139SBram Moolenaar  let g:a = ''
1749dfa3139SBram Moolenaar  try
1759dfa3139SBram Moolenaar    let g:a = execute(':unsilent :norm! n')
1769dfa3139SBram Moolenaar  catch /^Vim\%((\a\+)\)\=:E486/
1779dfa3139SBram Moolenaar    let stat = ''
1789dfa3139SBram Moolenaar    " error message is not redir'ed to g:a, it is empty
1799dfa3139SBram Moolenaar    call assert_true(empty(g:a))
1809dfa3139SBram Moolenaar  catch
1819dfa3139SBram Moolenaar    call assert_false(1)
1829dfa3139SBram Moolenaar  endtry
1839dfa3139SBram Moolenaar
1848f46e4c4SBram Moolenaar  " with count
1858f46e4c4SBram Moolenaar  call cursor(1, 1)
1868f46e4c4SBram Moolenaar  let @/ = 'fo*\(bar\?\)\?'
1878f46e4c4SBram Moolenaar  let g:a = execute(':unsilent :norm! 2n')
1888f46e4c4SBram Moolenaar  let stat = '\[3/50\]'
1898f46e4c4SBram Moolenaar  let pat = escape(@/, '()*?'). '\s\+'
1908f46e4c4SBram Moolenaar  call assert_match(pat .. stat, g:a)
1918f46e4c4SBram Moolenaar  let g:a = execute(':unsilent :norm! 2n')
1928f46e4c4SBram Moolenaar  let stat = '\[5/50\]'
1938f46e4c4SBram Moolenaar  call assert_match(pat .. stat, g:a)
1948f46e4c4SBram Moolenaar
1958f46e4c4SBram Moolenaar  " with offset
1968f46e4c4SBram Moolenaar  call cursor(1, 1)
1978f46e4c4SBram Moolenaar  call feedkeys("/fo*\\(bar\\?\\)\\?/+1\<cr>", 'tx')
1988f46e4c4SBram Moolenaar  let g:a = execute(':unsilent :norm! n')
1998f46e4c4SBram Moolenaar  let stat = '\[5/50\]'
2008f46e4c4SBram Moolenaar  let pat = escape(@/ .. '/+1', '()*?'). '\s\+'
2018f46e4c4SBram Moolenaar  call assert_match(pat .. stat, g:a)
2028f46e4c4SBram Moolenaar
203984f031fSBram Moolenaar  " normal, n comes from a mapping
2049ce3fa82SBram Moolenaar  "     Need to move over more than 64 lines to trigger char_avail(.
2059ce3fa82SBram Moolenaar  nnoremap n nzv
2069ce3fa82SBram Moolenaar  call cursor(1,1)
2079ce3fa82SBram Moolenaar  call append(50, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10))
2089ce3fa82SBram Moolenaar  call setline(2, 'find this')
2099ce3fa82SBram Moolenaar  call setline(70, 'find this')
2109ce3fa82SBram Moolenaar  let @/ = 'find this'
2119ce3fa82SBram Moolenaar  let pat = '/find this\s\+'
2129ce3fa82SBram Moolenaar  let g:a = execute(':unsilent :norm n')
2139ce3fa82SBram Moolenaar  " g:a will contain several lines
2149ce3fa82SBram Moolenaar  let g:b = split(g:a, "\n")[-1]
2159ce3fa82SBram Moolenaar  let stat = '\[1/2\]'
2169ce3fa82SBram Moolenaar  call assert_match(pat .. stat, g:b)
2179ce3fa82SBram Moolenaar  unmap n
2189ce3fa82SBram Moolenaar
219984f031fSBram Moolenaar  " normal, but silent
2209ce3fa82SBram Moolenaar  call cursor(1,1)
2219ce3fa82SBram Moolenaar  let @/ = 'find this'
2229ce3fa82SBram Moolenaar  let pat = '/find this\s\+'
2239ce3fa82SBram Moolenaar  let g:a = execute(':norm! n')
2249ce3fa82SBram Moolenaar  let stat = '\[1/2\]'
2259ce3fa82SBram Moolenaar  call assert_notmatch(pat .. stat, g:a)
2269ce3fa82SBram Moolenaar
22719e8ac72SBram Moolenaar  " normal, n comes from a silent mapping
22819e8ac72SBram Moolenaar  " First test a normal mapping, then a silent mapping
22919e8ac72SBram Moolenaar  call cursor(1,1)
23019e8ac72SBram Moolenaar  nnoremap n n
23119e8ac72SBram Moolenaar  let @/ = 'find this'
23219e8ac72SBram Moolenaar  let pat = '/find this\s\+'
23319e8ac72SBram Moolenaar  let g:a = execute(':unsilent :norm n')
23419e8ac72SBram Moolenaar  let g:b = split(g:a, "\n")[-1]
23519e8ac72SBram Moolenaar  let stat = '\[1/2\]'
23619e8ac72SBram Moolenaar  call assert_match(pat .. stat, g:b)
23719e8ac72SBram Moolenaar  nnoremap <silent> n n
23819e8ac72SBram Moolenaar  call cursor(1,1)
23919e8ac72SBram Moolenaar  let g:a = execute(':unsilent :norm n')
24019e8ac72SBram Moolenaar  let g:b = split(g:a, "\n")[-1]
24119e8ac72SBram Moolenaar  let stat = '\[1/2\]'
24219e8ac72SBram Moolenaar  call assert_notmatch(pat .. stat, g:b)
24319e8ac72SBram Moolenaar  call assert_match(stat, g:b)
2440f63ed33SBram Moolenaar  " Test that the message is not truncated
2450f63ed33SBram Moolenaar  " it would insert '...' into the output.
2460f63ed33SBram Moolenaar  call assert_match('^\s\+' .. stat, g:b)
24719e8ac72SBram Moolenaar  unmap n
24819e8ac72SBram Moolenaar
249e8f5ec0dSBram Moolenaar  " Time out
250e8f5ec0dSBram Moolenaar  %delete _
251e8f5ec0dSBram Moolenaar  call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 100000))
252e8f5ec0dSBram Moolenaar  call cursor(1, 1)
253e8f5ec0dSBram Moolenaar  call assert_equal(1, searchcount(#{pattern: 'foo', maxcount: 0, timeout: 1}).incomplete)
254e8f5ec0dSBram Moolenaar
25519e8ac72SBram Moolenaar  " Clean up
2569dfa3139SBram Moolenaar  set shortmess+=S
25719e8ac72SBram Moolenaar  " close the window
2589dfa3139SBram Moolenaar  bwipe!
2599dfa3139SBram Moolenaarendfunc
2600f63ed33SBram Moolenaar
26114681627SBram Moolenaarfunc Test_searchcount_fails()
26214681627SBram Moolenaar  call assert_fails('echo searchcount("boo!")', 'E715:')
263531be47aSBram Moolenaar  call assert_fails('echo searchcount({"timeout" : []})', 'E745:')
264531be47aSBram Moolenaar  call assert_fails('echo searchcount({"maxcount" : []})', 'E745:')
265531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pattern" : []})', 'E730:')
266531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pos" : 1})', 'E475:')
267531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pos" : [1]})', 'E475:')
268531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pos" : [[], 2, 3]})', 'E745:')
269531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pos" : [1, [], 3]})', 'E745:')
270531be47aSBram Moolenaar  call assert_fails('echo searchcount({"pos" : [1, 2, []]})', 'E745:')
27114681627SBram Moolenaarendfunc
27214681627SBram Moolenaar
273442a8536SBram Moolenaarfunc Test_searchcount_in_statusline()
274442a8536SBram Moolenaar  CheckScreendump
275442a8536SBram Moolenaar
276442a8536SBram Moolenaar  let lines =<< trim END
277442a8536SBram Moolenaar    set shortmess-=S
278442a8536SBram Moolenaar    call append(0, 'this is something')
279442a8536SBram Moolenaar    function TestSearchCount() abort
280442a8536SBram Moolenaar      let search_count = searchcount()
281442a8536SBram Moolenaar      if !empty(search_count)
282442a8536SBram Moolenaar	return '[' . search_count.current . '/' . search_count.total . ']'
283442a8536SBram Moolenaar      else
284442a8536SBram Moolenaar	return ''
285442a8536SBram Moolenaar      endif
286442a8536SBram Moolenaar    endfunction
287442a8536SBram Moolenaar    set hlsearch
288442a8536SBram Moolenaar    set laststatus=2 statusline+=%{TestSearchCount()}
289442a8536SBram Moolenaar  END
290442a8536SBram Moolenaar  call writefile(lines, 'Xsearchstatusline')
291442a8536SBram Moolenaar  let buf = RunVimInTerminal('-S Xsearchstatusline', #{rows: 10})
292442a8536SBram Moolenaar  call TermWait(buf)
293442a8536SBram Moolenaar  call term_sendkeys(buf, "/something")
294442a8536SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_4', {})
295442a8536SBram Moolenaar
296442a8536SBram Moolenaar  call term_sendkeys(buf, "\<Esc>")
297442a8536SBram Moolenaar  call StopVimInTerminal(buf)
298442a8536SBram Moolenaar  call delete('Xsearchstatusline')
299442a8536SBram Moolenaarendfunc
300442a8536SBram Moolenaar
3016cb07262SBram Moolenaarfunc Test_search_stat_foldopen()
3026cb07262SBram Moolenaar  CheckScreendump
3036cb07262SBram Moolenaar
3046cb07262SBram Moolenaar  let lines =<< trim END
3056cb07262SBram Moolenaar    set shortmess-=S
3066cb07262SBram Moolenaar    setl foldenable foldmethod=indent foldopen-=search
3076cb07262SBram Moolenaar    call append(0, ['if', "\tfoo", "\tfoo", 'endif'])
3086cb07262SBram Moolenaar    let @/ = 'foo'
3096cb07262SBram Moolenaar    call cursor(1,1)
3106cb07262SBram Moolenaar    norm n
3116cb07262SBram Moolenaar  END
3126cb07262SBram Moolenaar  call writefile(lines, 'Xsearchstat1')
3136cb07262SBram Moolenaar
3146cb07262SBram Moolenaar  let buf = RunVimInTerminal('-S Xsearchstat1', #{rows: 10})
3156cb07262SBram Moolenaar  call TermWait(buf)
3166cb07262SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_3', {})
3176cb07262SBram Moolenaar
3186cb07262SBram Moolenaar  call term_sendkeys(buf, "n")
3196cb07262SBram Moolenaar  call TermWait(buf)
3206cb07262SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_3', {})
3216cb07262SBram Moolenaar
3226cb07262SBram Moolenaar  call term_sendkeys(buf, "n")
3236cb07262SBram Moolenaar  call TermWait(buf)
3246cb07262SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_3', {})
3256cb07262SBram Moolenaar
3266cb07262SBram Moolenaar  call StopVimInTerminal(buf)
3276cb07262SBram Moolenaar  call delete('Xsearchstat1')
3286cb07262SBram Moolenaarendfunc
3296cb07262SBram Moolenaar
3300f63ed33SBram Moolenaarfunc! Test_search_stat_screendump()
3310f63ed33SBram Moolenaar  CheckScreendump
3320f63ed33SBram Moolenaar
3330f63ed33SBram Moolenaar  let lines =<< trim END
3340f63ed33SBram Moolenaar    set shortmess-=S
3350f63ed33SBram Moolenaar    " Append 50 lines with text to search for, "foobar" appears 20 times
3360f63ed33SBram Moolenaar    call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 20))
3370f63ed33SBram Moolenaar    call setline(2, 'find this')
3380f63ed33SBram Moolenaar    call setline(70, 'find this')
3390f63ed33SBram Moolenaar    nnoremap n n
3400f63ed33SBram Moolenaar    let @/ = 'find this'
3410f63ed33SBram Moolenaar    call cursor(1,1)
3420f63ed33SBram Moolenaar    norm n
3430f63ed33SBram Moolenaar  END
3440f63ed33SBram Moolenaar  call writefile(lines, 'Xsearchstat')
3450f63ed33SBram Moolenaar  let buf = RunVimInTerminal('-S Xsearchstat', #{rows: 10})
3466a2c5a7dSBram Moolenaar  call TermWait(buf)
3470f63ed33SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_1', {})
3480f63ed33SBram Moolenaar
3490f63ed33SBram Moolenaar  call term_sendkeys(buf, ":nnoremap <silent> n n\<cr>")
3500f63ed33SBram Moolenaar  call term_sendkeys(buf, "gg0n")
3516a2c5a7dSBram Moolenaar  call TermWait(buf)
3520f63ed33SBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstat_2', {})
3530f63ed33SBram Moolenaar
3540f63ed33SBram Moolenaar  call StopVimInTerminal(buf)
3550f63ed33SBram Moolenaar  call delete('Xsearchstat')
3560f63ed33SBram Moolenaarendfunc
3576d91bcb4SBram Moolenaar
358*0c71114aSBram Moolenaarfunc Test_search_stat_then_gd()
359*0c71114aSBram Moolenaar  CheckScreendump
360*0c71114aSBram Moolenaar
361*0c71114aSBram Moolenaar  let lines =<< trim END
362*0c71114aSBram Moolenaar    call setline(1, ['int cat;', 'int dog;', 'cat = dog;'])
363*0c71114aSBram Moolenaar    set shortmess-=S
364*0c71114aSBram Moolenaar    set hlsearch
365*0c71114aSBram Moolenaar  END
366*0c71114aSBram Moolenaar  call writefile(lines, 'Xsearchstatgd')
367*0c71114aSBram Moolenaar
368*0c71114aSBram Moolenaar  let buf = RunVimInTerminal('-S Xsearchstatgd', #{rows: 10})
369*0c71114aSBram Moolenaar  call term_sendkeys(buf, "/dog\<CR>")
370*0c71114aSBram Moolenaar  call TermWait(buf)
371*0c71114aSBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstatgd_1', {})
372*0c71114aSBram Moolenaar
373*0c71114aSBram Moolenaar  call term_sendkeys(buf, "G0gD")
374*0c71114aSBram Moolenaar  call TermWait(buf)
375*0c71114aSBram Moolenaar  call VerifyScreenDump(buf, 'Test_searchstatgd_2', {})
376*0c71114aSBram Moolenaar
377*0c71114aSBram Moolenaar  call StopVimInTerminal(buf)
378*0c71114aSBram Moolenaar  call delete('Xsearchstatgd')
379*0c71114aSBram Moolenaarendfunc
380*0c71114aSBram Moolenaar
381*0c71114aSBram Moolenaar
382*0c71114aSBram Moolenaar
3836d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
384