summaryrefslogtreecommitdiff
path: root/src/testdir/test_search_stat.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-05-04 21:08:40 +0200
committerBram Moolenaar <Bram@vim.org>2019-05-04 21:08:40 +0200
commit9dfa3139198b38b28673e251a3756430065914e9 (patch)
tree326cc1873083066be93fdd6aaa00a3c93b3310cc /src/testdir/test_search_stat.vim
parented5ab2a95972b5ef588bdafab9f197e1dcf0c1df (diff)
downloadvim-git-9dfa3139198b38b28673e251a3756430065914e9.tar.gz
patch 8.1.1270: cannot see current match positionv8.1.1270
Problem: Cannot see current match position. Solution: Show "3/44" when using the "n" command and "S" is not in 'shortmess'. (Christian Brabandt, closes #4317)
Diffstat (limited to 'src/testdir/test_search_stat.vim')
-rw-r--r--src/testdir/test_search_stat.vim108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/testdir/test_search_stat.vim b/src/testdir/test_search_stat.vim
new file mode 100644
index 000000000..37e2fdaef
--- /dev/null
+++ b/src/testdir/test_search_stat.vim
@@ -0,0 +1,108 @@
+" Tests for search_stats, when "S" is not in 'shortmess'
+"
+" This test is fragile, it might not work interactively, but it works when run
+" as test!
+
+func! Test_search_stat()
+ new
+ set shortmess-=S
+ call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10))
+
+ " 1) match at second line
+ call cursor(1, 1)
+ let @/ = 'fo*\(bar\?\)\?'
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[2/50\]'
+ let pat = escape(@/, '()*?'). '\s\+'
+ call assert_match(pat .. stat, g:a)
+
+ " 2) Match at last line
+ call cursor(line('$')-2, 1)
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[50/50\]'
+ call assert_match(pat .. stat, g:a)
+
+ " 3) No search stat
+ set shortmess+=S
+ call cursor(1, 1)
+ let stat = '\[2/50\]'
+ let g:a = execute(':unsilent :norm! n')
+ call assert_notmatch(pat .. stat, g:a)
+ set shortmess-=S
+
+ " 4) Many matches
+ call cursor(line('$')-2, 1)
+ let @/ = '.'
+ let pat = escape(@/, '()*?'). '\s\+'
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[>99/>99\]'
+ call assert_match(pat .. stat, g:a)
+
+ " 5) Many matches
+ call cursor(1, 1)
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[2/>99\]'
+ call assert_match(pat .. stat, g:a)
+
+ " 6) right-left
+ if exists("+rightleft")
+ set rl
+ call cursor(1,1)
+ let @/ = 'foobar'
+ let pat = 'raboof/\s\+'
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[20/2\]'
+ call assert_match(pat .. stat, g:a)
+ set norl
+ endif
+
+ " 7) right-left bottom
+ if exists("+rightleft")
+ set rl
+ call cursor('$',1)
+ let pat = 'raboof?\s\+'
+ let g:a = execute(':unsilent :norm! N')
+ let stat = '\[20/20\]'
+ call assert_match(pat .. stat, g:a)
+ set norl
+ endif
+
+ " 8) right-left back at top
+ if exists("+rightleft")
+ set rl
+ call cursor('$',1)
+ let pat = 'raboof/\s\+'
+ let g:a = execute(':unsilent :norm! n')
+ let stat = '\[20/1\]'
+ call assert_match(pat .. stat, g:a)
+ call assert_match('search hit BOTTOM, continuing at TOP', g:a)
+ set norl
+ endif
+
+ " 9) normal, back at top
+ call cursor(1,1)
+ let @/ = 'foobar'
+ let pat = '?foobar\s\+'
+ let g:a = execute(':unsilent :norm! N')
+ let stat = '\[20/20\]'
+ call assert_match(pat .. stat, g:a)
+ call assert_match('search hit TOP, continuing at BOTTOM', g:a)
+
+ " 10) normal, no match
+ call cursor(1,1)
+ let @/ = 'zzzzzz'
+ let g:a = ''
+ try
+ let g:a = execute(':unsilent :norm! n')
+ catch /^Vim\%((\a\+)\)\=:E486/
+ let stat = ''
+ " error message is not redir'ed to g:a, it is empty
+ call assert_true(empty(g:a))
+ catch
+ call assert_false(1)
+ endtry
+
+ " close the window
+ set shortmess+=S
+ bwipe!
+endfunc