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