Mercurial > vim
view src/testdir/test_search_stat.vim @ 17952:4754339d9aee v8.1.1972
patch 8.1.1972: no proper test for getchar()
Commit: https://github.com/vim/vim/commit/5d712e4672c6c8cf7f35cfb7d8eb7e8aa24062ac
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Sep 3 23:37:01 2019 +0200
patch 8.1.1972: no proper test for getchar()
Problem: No proper test for getchar().
Solution: Add a test with special characters.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 03 Sep 2019 23:45:04 +0200 |
parents | c77a41ea0365 |
children | 22ddc0ee65e7 |
line wrap: on
line source
" 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! source shared.vim func! Test_search_stat() new set shortmess-=S " Append 50 lines with text to search for, "foobar" appears 20 times call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10)) " match at second line call cursor(1, 1) let messages_before = execute('messages') 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) " didn't get added to message history call assert_equal(messages_before, execute('messages')) " 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) " 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 " 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) call cursor(line('$'), 1) let g:a = execute(':unsilent :norm! n') let stat = '\[1/>99\] W' call assert_match(pat .. stat, g:a) " Many matches call cursor(1, 1) let g:a = execute(':unsilent :norm! n') let stat = '\[2/>99\]' call assert_match(pat .. stat, g:a) call cursor(1, 1) let g:a = execute(':unsilent :norm! N') let stat = '\[>99/>99\] W' call assert_match(pat .. stat, g:a) " 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 " 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 " 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 " normal, back at bottom 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) call assert_match('\[20/20\] W', Screenline(&lines)) " 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 " with count call cursor(1, 1) let @/ = 'fo*\(bar\?\)\?' let g:a = execute(':unsilent :norm! 2n') let stat = '\[3/50\]' let pat = escape(@/, '()*?'). '\s\+' call assert_match(pat .. stat, g:a) let g:a = execute(':unsilent :norm! 2n') let stat = '\[5/50\]' call assert_match(pat .. stat, g:a) " with offset call cursor(1, 1) call feedkeys("/fo*\\(bar\\?\\)\\?/+1\<cr>", 'tx') let g:a = execute(':unsilent :norm! n') let stat = '\[5/50\]' let pat = escape(@/ .. '/+1', '()*?'). '\s\+' call assert_match(pat .. stat, g:a) " normal, n comes from a mapping " Need to move over more than 64 lines to trigger char_avail(. nnoremap n nzv call cursor(1,1) call append(50, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10)) call setline(2, 'find this') call setline(70, 'find this') let @/ = 'find this' let pat = '/find this\s\+' let g:a = execute(':unsilent :norm n') " g:a will contain several lines let g:b = split(g:a, "\n")[-1] let stat = '\[1/2\]' call assert_match(pat .. stat, g:b) unmap n " normal, but silent call cursor(1,1) let @/ = 'find this' let pat = '/find this\s\+' let g:a = execute(':norm! n') let stat = '\[1/2\]' call assert_notmatch(pat .. stat, g:a) " normal, n comes from a silent mapping " First test a normal mapping, then a silent mapping call cursor(1,1) nnoremap n n let @/ = 'find this' let pat = '/find this\s\+' let g:a = execute(':unsilent :norm n') let g:b = split(g:a, "\n")[-1] let stat = '\[1/2\]' call assert_match(pat .. stat, g:b) nnoremap <silent> n n call cursor(1,1) let g:a = execute(':unsilent :norm n') let g:b = split(g:a, "\n")[-1] let stat = '\[1/2\]' call assert_notmatch(pat .. stat, g:b) call assert_match(stat, g:b) unmap n " Clean up set shortmess+=S " close the window bwipe! endfunc