mirror of
https://github.com/vim/vim.git
synced 2025-10-27 09:24:23 -04:00
Problem: tests: too many imports in the test suite Solution: Clean up the imported scripts Most tests make use of check.vim, so let's just source it once in runtest.vim instead of having each test manually source it. runtest.vim already sources shared.vim, which again sources view_util.vim, so we don't need to source those two common dependencies in all the other tests And then check.vim sources term_util.vim already, so we can in addition drop sourcing it explicitly in each single test script. Note: test_expand_func.vim had to be updated to account for the changed number of sourced files. And finally check.vim uses line-continuation so let's also explicitly enable line continuation via the 'cpo' option value. related: #17677 Signed-off-by: Christian Brabandt <cb@256bit.org>
144 lines
4.3 KiB
VimL
144 lines
4.3 KiB
VimL
" Tests for system() and systemlist()
|
|
|
|
func Test_System()
|
|
if !has('win32')
|
|
call assert_equal("123\n", system('echo 123'))
|
|
call assert_equal(['123'], systemlist('echo 123'))
|
|
call assert_equal('123', system('cat', '123'))
|
|
call assert_equal(['123'], systemlist('cat', '123'))
|
|
call assert_equal(["as\<NL>df"], systemlist('cat', ["as\<NL>df"]))
|
|
else
|
|
call assert_equal("123\n", system('echo 123'))
|
|
call assert_equal(["123\r"], systemlist('echo 123'))
|
|
call assert_equal("123\n", system('more.com', '123'))
|
|
call assert_equal(["123\r"], systemlist('more.com', '123'))
|
|
call assert_equal(["as\r", "df\r"], systemlist('more.com', ["as\<NL>df"]))
|
|
endif
|
|
|
|
new Xdummy
|
|
call setline(1, ['asdf', "pw\<NL>er", 'xxxx'])
|
|
|
|
if executable('wc')
|
|
let out = system('wc -l', bufnr('%'))
|
|
" On OS/X we get leading spaces
|
|
let out = substitute(out, '^ *', '', '')
|
|
call assert_equal("3\n", out)
|
|
|
|
let out = systemlist('wc -l', bufnr('%'))
|
|
" On Windows we may get a trailing CR.
|
|
if out != ["3\r"]
|
|
" On OS/X we get leading spaces
|
|
if type(out) == v:t_list
|
|
let out[0] = substitute(out[0], '^ *', '', '')
|
|
endif
|
|
call assert_equal(['3'], out)
|
|
endif
|
|
endif
|
|
|
|
if !has('win32')
|
|
let out = systemlist('cat', bufnr('%'))
|
|
call assert_equal(['asdf', "pw\<NL>er", 'xxxx'], out)
|
|
else
|
|
let out = systemlist('more.com', bufnr('%'))
|
|
call assert_equal(["asdf\r", "pw\r", "er\r", "xxxx\r"], out)
|
|
endif
|
|
bwipe!
|
|
|
|
call assert_fails('call system("wc -l", 99999)', 'E86:')
|
|
endfunc
|
|
|
|
func Test_system_exmode()
|
|
if has('unix') " echo $? only works on Unix
|
|
let cmd = ' -es -c "source Xscript" +q; echo "result=$?"'
|
|
" Need to put this in a script, "catch" isn't found after an unknown
|
|
" function.
|
|
call writefile(['try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript', 'D')
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_match('result=0', a)
|
|
call assert_equal(0, v:shell_error)
|
|
endif
|
|
|
|
" Error before try does set error flag.
|
|
call writefile(['call nosuchfunction()', 'try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript')
|
|
if has('unix') " echo $? only works on Unix
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_notequal('0', a[0])
|
|
endif
|
|
|
|
let cmd = ' -es -c "source Xscript" +q'
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_notequal(0, v:shell_error)
|
|
|
|
if has('unix') " echo $? only works on Unix
|
|
let cmd = ' -es -c "call doesnotexist()" +q; echo $?'
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_notequal(0, a[0])
|
|
endif
|
|
|
|
let cmd = ' -es -c "call doesnotexist()" +q'
|
|
let a = system(GetVimCommand(). cmd)
|
|
call assert_notequal(0, v:shell_error)
|
|
|
|
if has('unix') " echo $? only works on Unix
|
|
let cmd = ' -es -c "call doesnotexist()|let a=1" +q; echo $?'
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_notequal(0, a[0])
|
|
endif
|
|
|
|
let cmd = ' -es -c "call doesnotexist()|let a=1" +q'
|
|
let a = system(GetVimCommand() . cmd)
|
|
call assert_notequal(0, v:shell_error)
|
|
endfunc
|
|
|
|
func Test_system_with_shell_quote()
|
|
CheckMSWindows
|
|
|
|
call mkdir('Xdir with spaces', 'p')
|
|
call system('copy "%COMSPEC%" "Xdir with spaces\cmd.exe"')
|
|
|
|
let shell_save = &shell
|
|
let shellxquote_save = &shellxquote
|
|
try
|
|
" Set 'shell' always needs noshellslash.
|
|
let shellslash_save = &shellslash
|
|
set noshellslash
|
|
let shell_tests = [
|
|
\ expand('$COMSPEC'),
|
|
\ '"' . fnamemodify('Xdir with spaces\cmd.exe', ':p') . '"',
|
|
\]
|
|
let &shellslash = shellslash_save
|
|
|
|
let sxq_tests = ['', '(', '"']
|
|
|
|
" Matrix tests: 'shell' * 'shellxquote'
|
|
for shell in shell_tests
|
|
let &shell = shell
|
|
for sxq in sxq_tests
|
|
let &shellxquote = sxq
|
|
|
|
let msg = printf('shell=%s shellxquote=%s', &shell, &shellxquote)
|
|
|
|
try
|
|
let out = 'echo 123'->system()
|
|
catch
|
|
call assert_report(printf('%s: %s', msg, v:exception))
|
|
continue
|
|
endtry
|
|
|
|
" On Windows we may get a trailing space and CR.
|
|
if out != "123 \n"
|
|
call assert_equal("123\n", out, msg)
|
|
endif
|
|
|
|
endfor
|
|
endfor
|
|
|
|
finally
|
|
let &shell = shell_save
|
|
let &shellxquote = shellxquote_save
|
|
call delete('Xdir with spaces', 'rf')
|
|
endtry
|
|
endfunc
|
|
|
|
" vim: shiftwidth=2 sts=2 expandtab
|