vim-patch:8.2.0293: various Ex commands not sufficiently tested

Problem:    Various Ex commands not sufficiently tested.
Solution:   Add more test cases. (Yegappan Lakshmanan, closes vim/vim#5673)
818fc9ad14

Needs to assert E170 instead of E580 because patch 8.2.3486 has been
ported but patch 8.2.1183 hasn't.
This commit is contained in:
zeertzjq
2022-07-12 14:45:36 +08:00
parent 01afd43bc9
commit 4aa4675fbf
12 changed files with 180 additions and 3 deletions

View File

@@ -520,8 +520,10 @@ func Test_quit_with_arglist()
throw 'Skipped: cannot run vim in terminal'
endif
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":set nomore\n")
call term_sendkeys(buf, ":args a b c\n")
call term_sendkeys(buf, ":quit\n")
call term_wait(buf)
call WaitForAssert({-> assert_match('^E173:', term_getline(buf, 6))})
call StopVimInTerminal(buf)
@@ -530,14 +532,18 @@ func Test_quit_with_arglist()
call term_sendkeys(buf, ":set nomore\n")
call term_sendkeys(buf, ":args a b c\n")
call term_sendkeys(buf, ":confirm quit\n")
call term_wait(buf)
call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
\ term_getline(buf, 6))})
call term_sendkeys(buf, "N")
call term_wait(buf)
call term_sendkeys(buf, ":confirm quit\n")
call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
\ term_getline(buf, 6))})
call term_sendkeys(buf, "Y")
call StopVimInTerminal(buf)
call term_wait(buf)
call WaitForAssert({-> assert_equal("finished", term_getstatus(buf))})
only!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -1385,6 +1385,35 @@ func Test_cmdwin_tabpage()
tabclose!
endfunc
" Test for the :! command
func Test_cmd_bang()
if !has('unix')
return
endif
let lines =<< trim [SCRIPT]
" Test for no previous command
call assert_fails('!!', 'E34:')
set nomore
" Test for cmdline expansion with :!
call setline(1, 'foo!')
silent !echo <cWORD> > Xfile.out
call assert_equal(['foo!'], readfile('Xfile.out'))
" Test for using previous command
silent !echo \! !
call assert_equal(['! echo foo!'], readfile('Xfile.out'))
call writefile(v:errors, 'Xresult')
call delete('Xfile.out')
qall!
[SCRIPT]
call writefile(lines, 'Xscript')
if RunVim([], [], '--clean -S Xscript')
call assert_equal([], readfile('Xresult'))
endif
call delete('Xscript')
call delete('Xresult')
endfunc
" Test error: "E135: *Filter* Autocommands must not change current buffer"
func Test_cmd_bang_E135()
new

View File

@@ -507,6 +507,42 @@ func Test_run_excmd_with_text_locked()
call assert_fails("call feedkeys(\":\<C-R>=execute('bnext')\<CR>\", 'xt')", 'E565:')
endfunc
" Test for the :verbose command
func Test_verbose_cmd()
call assert_equal([' verbose=1'], split(execute('verbose set vbs'), "\n"))
call assert_equal([' verbose=0'], split(execute('0verbose set vbs'), "\n"))
let l = execute("4verbose set verbose | set verbose")
call assert_equal([' verbose=4', ' verbose=0'], split(l, "\n"))
endfunc
" Test for the :delete command and the related abbreviated commands
func Test_excmd_delete()
new
call setline(1, ['foo', "\tbar"])
call assert_equal(['^Ibar$'], split(execute('dl'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal(['^Ibar$'], split(execute('dell'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal(['^Ibar$'], split(execute('delel'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal(['^Ibar$'], split(execute('deletl'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal(['^Ibar$'], split(execute('deletel'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('dp'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('dep'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('delp'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('delep'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('deletp'), "\n"))
call setline(1, ['foo', "\tbar"])
call assert_equal([' bar'], split(execute('deletep'), "\n"))
close!
endfunc
func Test_not_break_expression_register()
call setreg('=', '1+1')
if 0

View File

@@ -81,7 +81,11 @@ func Test_expandcmd()
call assert_fails('call expandcmd("make <afile>")', 'E495:')
enew
call assert_fails('call expandcmd("make %")', 'E499:')
close
let $FOO="blue\tsky"
call setline(1, "$FOO")
call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>'))
unlet $FOO
close!
endfunc
" Test for expanding <sfile>, <slnum> and <sflnum> outside of sourcing a script
@@ -108,5 +112,17 @@ func Test_source_sfile()
call delete('Xresult')
endfunc
" Test for expanding filenames multiple times in a command line
func Test_expand_filename_multicmd()
edit foo
call setline(1, 'foo!')
new
call setline(1, 'foo!')
new <cword> | new <cWORD>
call assert_equal(4, winnr('$'))
call assert_equal('foo!', bufname(winbufnr(1)))
call assert_equal('foo', bufname(winbufnr(2)))
%bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -772,8 +772,12 @@ func Test_filetype_indent_off()
new Xtest.vim
filetype indent on
call assert_equal(1, g:did_indent_on)
call assert_equal(['filetype detection:ON plugin:OFF indent:ON'],
\ execute('filetype')->split("\n"))
filetype indent off
call assert_equal(0, exists('g:did_indent_on'))
call assert_equal(['filetype detection:ON plugin:OFF indent:OFF'],
\ execute('filetype')->split("\n"))
close
endfunc

View File

@@ -45,6 +45,14 @@ func Test_filter_fails()
call assert_fails('filter /pat', 'E476:')
call assert_fails('filter /pat/', 'E476:')
call assert_fails('filter /pat/ asdf', 'E492:')
" Using assert_fails() causes E476 instead of E866. So use a try-catch.
let caught_e866 = 0
try
filter /\@>b/ ls
catch /E866:/
let caught_e866 = 1
endtry
call assert_equal(1, caught_e866)
call assert_fails('filter!', 'E471:')
call assert_fails('filter! pat', 'E476:')

View File

@@ -66,6 +66,18 @@ func Test_global_print()
close!
endfunc
" Test for global command with newline character
func Test_global_newline()
new
call setline(1, ['foo'])
exe "g/foo/s/f/h/\<NL>s/o$/w/"
call assert_equal('how', getline(1))
call setline(1, ["foo\<NL>bar"])
exe "g/foo/s/foo\\\<NL>bar/xyz/"
call assert_equal('xyz', getline(1))
close!
endfunc
func Test_wrong_delimiter()
call assert_fails('g x^bxd', 'E146:')
endfunc

View File

@@ -18,7 +18,7 @@ func Test_edit_bad()
e! ++enc=utf8 Xfile
call assert_equal('[?][?][???][??]', getline(1))
e! ++enc=utf8 ++bad=_ Xfile
e! ++encoding=utf8 ++bad=_ Xfile
call assert_equal('[_][_][___][__]', getline(1))
e! ++enc=utf8 ++bad=drop Xfile

View File

@@ -499,6 +499,7 @@ func Xtest_browse(cchar)
\ 'RegularLine2']
Xfirst
call assert_fails('-5Xcc', 'E16:')
call assert_fails('Xprev', 'E553')
call assert_fails('Xpfile', 'E553')
Xnfile

View File

@@ -1996,6 +1996,47 @@ func Test_reload_in_try_catch()
call delete('Xreload')
endfunc
" Test for errors with :catch, :throw, :finally {{{1
func Test_try_catch_errors()
call assert_fails('throw |', 'E471:')
call assert_fails("throw \n ", 'E471:')
call assert_fails('catch abc', 'E603:')
call assert_fails('try | let i = 1| finally | catch | endtry', 'E604:')
call assert_fails('finally', 'E606:')
call assert_fails('try | finally | finally | endtry', 'E607:')
" v8.2.3486 has been ported, but v8.2.1183 hasn't, so E170 appears here.
" call assert_fails('try | for i in range(5) | endif | endtry', 'E580:')
call assert_fails('try | for i in range(5) | endif | endtry', 'E170:')
call assert_fails('try | while v:true | endtry', 'E170:')
call assert_fails('try | if v:true | endtry', 'E171:')
endfunc
" Test for verbose messages with :try :catch, and :finally {{{1
func Test_try_catch_verbose()
" This test works only when the language is English
if v:lang != "C" && v:lang !~ '^[Ee]n'
return
endif
set verbose=14
redir => msg
try
echo i
catch /E121:/
finally
endtry
redir END
let expected = [
\ 'Exception thrown: Vim(echo):E121: Undefined variable: i',
\ '',
\ 'Exception caught: Vim(echo):E121: Undefined variable: i',
\ '',
\ 'Exception finished: Vim(echo):E121: Undefined variable: i'
\ ]
call assert_equal(expected, split(msg, "\n"))
set verbose&
endfunc
" Test for using throw in a called function with following error {{{1
func Test_user_command_throw_in_function_call()
let lines =<< trim END

View File

@@ -1782,6 +1782,29 @@ func Test_missing_end()
call writefile(['try', 'echo "."'], 'Xscript')
call assert_fails('source Xscript', 'E600:')
call delete('Xscript')
" Using endfor with :while
let caught_e732 = 0
try
while v:true
endfor
catch /E732:/
let caught_e732 = 1
endtry
call assert_equal(1, caught_e732)
" Using endwhile with :for
let caught_e733 = 0
try
for i in range(1)
endwhile
catch /E733:/
let caught_e733 = 1
endtry
call assert_equal(1, caught_e733)
" Missing 'in' in a :for statement
call assert_fails('for i range(1) | endfor', 'E690:')
endfunc
" Test for deep nesting of if/for/while/try statements {{{1