1" Tests for search_stats, when "S" is not in 'shortmess' 2" 3" This test is fragile, it might not work interactively, but it works when run 4" as test! 5 6source shared.vim 7 8func! Test_search_stat() 9 new 10 set shortmess-=S 11 " Append 50 lines with text to search for, "foobar" appears 20 times 12 call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10)) 13 14 " 1) match at second line 15 call cursor(1, 1) 16 let @/ = 'fo*\(bar\?\)\?' 17 let g:a = execute(':unsilent :norm! n') 18 let stat = '\[2/50\]' 19 let pat = escape(@/, '()*?'). '\s\+' 20 call assert_match(pat .. stat, g:a) 21 22 " 2) Match at last line 23 call cursor(line('$')-2, 1) 24 let g:a = execute(':unsilent :norm! n') 25 let stat = '\[50/50\]' 26 call assert_match(pat .. stat, g:a) 27 28 " 3) No search stat 29 set shortmess+=S 30 call cursor(1, 1) 31 let stat = '\[2/50\]' 32 let g:a = execute(':unsilent :norm! n') 33 call assert_notmatch(pat .. stat, g:a) 34 set shortmess-=S 35 36 " 4) Many matches 37 call cursor(line('$')-2, 1) 38 let @/ = '.' 39 let pat = escape(@/, '()*?'). '\s\+' 40 let g:a = execute(':unsilent :norm! n') 41 let stat = '\[>99/>99\]' 42 call assert_match(pat .. stat, g:a) 43 44 " 5) Many matches 45 call cursor(1, 1) 46 let g:a = execute(':unsilent :norm! n') 47 let stat = '\[2/>99\]' 48 call assert_match(pat .. stat, g:a) 49 50 " 6) right-left 51 if exists("+rightleft") 52 set rl 53 call cursor(1,1) 54 let @/ = 'foobar' 55 let pat = 'raboof/\s\+' 56 let g:a = execute(':unsilent :norm! n') 57 let stat = '\[20/2\]' 58 call assert_match(pat .. stat, g:a) 59 set norl 60 endif 61 62 " 7) right-left bottom 63 if exists("+rightleft") 64 set rl 65 call cursor('$',1) 66 let pat = 'raboof?\s\+' 67 let g:a = execute(':unsilent :norm! N') 68 let stat = '\[20/20\]' 69 call assert_match(pat .. stat, g:a) 70 set norl 71 endif 72 73 " 8) right-left back at top 74 if exists("+rightleft") 75 set rl 76 call cursor('$',1) 77 let pat = 'raboof/\s\+' 78 let g:a = execute(':unsilent :norm! n') 79 let stat = '\[20/1\]' 80 call assert_match(pat .. stat, g:a) 81 call assert_match('search hit BOTTOM, continuing at TOP', g:a) 82 set norl 83 endif 84 85 " 9) normal, back at bottom 86 call cursor(1,1) 87 let @/ = 'foobar' 88 let pat = '?foobar\s\+' 89 let g:a = execute(':unsilent :norm! N') 90 let stat = '\[20/20\]' 91 call assert_match(pat .. stat, g:a) 92 call assert_match('search hit TOP, continuing at BOTTOM', g:a) 93 call assert_match('\[20/20\] W', Screenline(&lines)) 94 95 " 10) normal, no match 96 call cursor(1,1) 97 let @/ = 'zzzzzz' 98 let g:a = '' 99 try 100 let g:a = execute(':unsilent :norm! n') 101 catch /^Vim\%((\a\+)\)\=:E486/ 102 let stat = '' 103 " error message is not redir'ed to g:a, it is empty 104 call assert_true(empty(g:a)) 105 catch 106 call assert_false(1) 107 endtry 108 109 " 11) normal, n comes from a mapping 110 " Need to move over more than 64 lines to trigger char_avail(. 111 nnoremap n nzv 112 call cursor(1,1) 113 call append(50, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10)) 114 call setline(2, 'find this') 115 call setline(70, 'find this') 116 let @/ = 'find this' 117 let pat = '/find this\s\+' 118 let g:a = execute(':unsilent :norm n') 119 " g:a will contain several lines 120 let g:b = split(g:a, "\n")[-1] 121 let stat = '\[1/2\]' 122 call assert_match(pat .. stat, g:b) 123 unmap n 124 125 " 11) normal, but silent 126 call cursor(1,1) 127 let @/ = 'find this' 128 let pat = '/find this\s\+' 129 let g:a = execute(':norm! n') 130 let stat = '\[1/2\]' 131 call assert_notmatch(pat .. stat, g:a) 132 133 " close the window 134 set shortmess+=S 135 bwipe! 136endfunc 137