diff src/testdir/test_search_stat.vim @ 16533:5e25171e0e75 v8.1.1270

patch 8.1.1270: cannot see current match position commit https://github.com/vim/vim/commit/9dfa3139198b38b28673e251a3756430065914e9 Author: Bram Moolenaar <Bram@vim.org> Date: Sat May 4 21:08:40 2019 +0200 patch 8.1.1270: cannot see current match position 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)
author Bram Moolenaar <Bram@vim.org>
date Sat, 04 May 2019 21:15:05 +0200
parents
children 8d0ea09e2d81
line wrap: on
line diff
new file mode 100644
--- /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