112c4492dSBram Moolenaar" Tests for system() and systemlist() 212c4492dSBram Moolenaar 393344c2dSBram Moolenaarsource shared.vim 42efc44b3SBram Moolenaarsource check.vim 593344c2dSBram Moolenaar 61e115360SBram Moolenaarfunc Test_System() 71a613398SBram Moolenaar if !has('win32') 81a613398SBram Moolenaar call assert_equal("123\n", system('echo 123')) 91a613398SBram Moolenaar call assert_equal(['123'], systemlist('echo 123')) 101a613398SBram Moolenaar call assert_equal('123', system('cat', '123')) 111a613398SBram Moolenaar call assert_equal(['123'], systemlist('cat', '123')) 121a613398SBram Moolenaar call assert_equal(["as\<NL>df"], systemlist('cat', ["as\<NL>df"])) 131a613398SBram Moolenaar else 141a613398SBram Moolenaar call assert_equal("123\n", system('echo 123')) 151a613398SBram Moolenaar call assert_equal(["123\r"], systemlist('echo 123')) 16*4cc45a36SBram Moolenaar call assert_equal("123\n", system('more.com', '123')) 17*4cc45a36SBram Moolenaar call assert_equal(["123\r"], systemlist('more.com', '123')) 18*4cc45a36SBram Moolenaar call assert_equal(["as\r", "df\r"], systemlist('more.com', ["as\<NL>df"])) 191a613398SBram Moolenaar endif 201a613398SBram Moolenaar 2112c4492dSBram Moolenaar new Xdummy 2212c4492dSBram Moolenaar call setline(1, ['asdf', "pw\<NL>er", 'xxxx']) 23077ff436SBram Moolenaar 24077ff436SBram Moolenaar if executable('wc') 2531f19ce0SBram Moolenaar let out = system('wc -l', bufnr('%')) 2631f19ce0SBram Moolenaar " On OS/X we get leading spaces 2731f19ce0SBram Moolenaar let out = substitute(out, '^ *', '', '') 2831f19ce0SBram Moolenaar call assert_equal("3\n", out) 299d9c3565SBram Moolenaar 309d9c3565SBram Moolenaar let out = systemlist('wc -l', bufnr('%')) 319d9c3565SBram Moolenaar " On Windows we may get a trailing CR. 329d9c3565SBram Moolenaar if out != ["3\r"] 3331f19ce0SBram Moolenaar " On OS/X we get leading spaces 3431f19ce0SBram Moolenaar if type(out) == v:t_list 3531f19ce0SBram Moolenaar let out[0] = substitute(out[0], '^ *', '', '') 3631f19ce0SBram Moolenaar endif 379d9c3565SBram Moolenaar call assert_equal(['3'], out) 389d9c3565SBram Moolenaar endif 39077ff436SBram Moolenaar endif 409d9c3565SBram Moolenaar 411a613398SBram Moolenaar if !has('win32') 429d9c3565SBram Moolenaar let out = systemlist('cat', bufnr('%')) 431a613398SBram Moolenaar call assert_equal(['asdf', "pw\<NL>er", 'xxxx'], out) 441a613398SBram Moolenaar else 45*4cc45a36SBram Moolenaar let out = systemlist('more.com', bufnr('%')) 469be0e0b9SBram Moolenaar call assert_equal(["asdf\r", "pw\r", "er\r", "xxxx\r"], out) 479d9c3565SBram Moolenaar endif 4812c4492dSBram Moolenaar bwipe! 4912c4492dSBram Moolenaar 5012c4492dSBram Moolenaar call assert_fails('call system("wc -l", 99999)', 'E86:') 511e115360SBram Moolenaarendfunc 522b7bc567SBram Moolenaar 531e115360SBram Moolenaarfunc Test_system_exmode() 5497d62d43SBram Moolenaar if has('unix') " echo $? only works on Unix 5593344c2dSBram Moolenaar let cmd = ' -es -c "source Xscript" +q; echo "result=$?"' 562b7bc567SBram Moolenaar " Need to put this in a script, "catch" isn't found after an unknown 572b7bc567SBram Moolenaar " function. 582b7bc567SBram Moolenaar call writefile(['try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript') 5993344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 6011e79bb0SBram Moolenaar call assert_match('result=0', a) 612b7bc567SBram Moolenaar call assert_equal(0, v:shell_error) 6297d62d43SBram Moolenaar endif 632b7bc567SBram Moolenaar 642b7bc567SBram Moolenaar " Error before try does set error flag. 652b7bc567SBram Moolenaar call writefile(['call nosuchfunction()', 'try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript') 6697d62d43SBram Moolenaar if has('unix') " echo $? only works on Unix 6793344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 682b7bc567SBram Moolenaar call assert_notequal('0', a[0]) 6997d62d43SBram Moolenaar endif 702b7bc567SBram Moolenaar 7193344c2dSBram Moolenaar let cmd = ' -es -c "source Xscript" +q' 7293344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 732b7bc567SBram Moolenaar call assert_notequal(0, v:shell_error) 742b7bc567SBram Moolenaar call delete('Xscript') 7597d62d43SBram Moolenaar 7697d62d43SBram Moolenaar if has('unix') " echo $? only works on Unix 7793344c2dSBram Moolenaar let cmd = ' -es -c "call doesnotexist()" +q; echo $?' 7893344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 7997d62d43SBram Moolenaar call assert_notequal(0, a[0]) 8097d62d43SBram Moolenaar endif 8197d62d43SBram Moolenaar 8293344c2dSBram Moolenaar let cmd = ' -es -c "call doesnotexist()" +q' 8393344c2dSBram Moolenaar let a = system(GetVimCommand(). cmd) 8497d62d43SBram Moolenaar call assert_notequal(0, v:shell_error) 8597d62d43SBram Moolenaar 8697d62d43SBram Moolenaar if has('unix') " echo $? only works on Unix 8793344c2dSBram Moolenaar let cmd = ' -es -c "call doesnotexist()|let a=1" +q; echo $?' 8893344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 8997d62d43SBram Moolenaar call assert_notequal(0, a[0]) 9097d62d43SBram Moolenaar endif 9197d62d43SBram Moolenaar 9293344c2dSBram Moolenaar let cmd = ' -es -c "call doesnotexist()|let a=1" +q' 9393344c2dSBram Moolenaar let a = system(GetVimCommand() . cmd) 9497d62d43SBram Moolenaar call assert_notequal(0, v:shell_error) 952b7bc567SBram Moolenaarendfunc 962efc44b3SBram Moolenaar 972efc44b3SBram Moolenaarfunc Test_system_with_shell_quote() 982efc44b3SBram Moolenaar CheckMSWindows 992efc44b3SBram Moolenaar 1002efc44b3SBram Moolenaar call mkdir('Xdir with spaces', 'p') 1012efc44b3SBram Moolenaar call system('copy "%COMSPEC%" "Xdir with spaces\cmd.exe"') 1022efc44b3SBram Moolenaar 1032efc44b3SBram Moolenaar let shell_save = &shell 1042efc44b3SBram Moolenaar let shellxquote_save = &shellxquote 1052efc44b3SBram Moolenaar try 1062efc44b3SBram Moolenaar " Set 'shell' always needs noshellslash. 1072efc44b3SBram Moolenaar let shellslash_save = &shellslash 1082efc44b3SBram Moolenaar set noshellslash 1092efc44b3SBram Moolenaar let shell_tests = [ 1102efc44b3SBram Moolenaar \ expand('$COMSPEC'), 1112efc44b3SBram Moolenaar \ '"' . fnamemodify('Xdir with spaces\cmd.exe', ':p') . '"', 1122efc44b3SBram Moolenaar \] 1132efc44b3SBram Moolenaar let &shellslash = shellslash_save 1142efc44b3SBram Moolenaar 1152efc44b3SBram Moolenaar let sxq_tests = ['', '(', '"'] 1162efc44b3SBram Moolenaar 1172efc44b3SBram Moolenaar " Matrix tests: 'shell' * 'shellxquote' 1182efc44b3SBram Moolenaar for shell in shell_tests 1192efc44b3SBram Moolenaar let &shell = shell 1202efc44b3SBram Moolenaar for sxq in sxq_tests 1212efc44b3SBram Moolenaar let &shellxquote = sxq 1222efc44b3SBram Moolenaar 1232efc44b3SBram Moolenaar let msg = printf('shell=%s shellxquote=%s', &shell, &shellxquote) 1242efc44b3SBram Moolenaar 1252efc44b3SBram Moolenaar try 1262efc44b3SBram Moolenaar let out = 'echo 123'->system() 1272efc44b3SBram Moolenaar catch 1282efc44b3SBram Moolenaar call assert_report(printf('%s: %s', msg, v:exception)) 1292efc44b3SBram Moolenaar continue 1302efc44b3SBram Moolenaar endtry 1312efc44b3SBram Moolenaar 1322efc44b3SBram Moolenaar " On Windows we may get a trailing space and CR. 1332efc44b3SBram Moolenaar if out != "123 \n" 1342efc44b3SBram Moolenaar call assert_equal("123\n", out, msg) 1352efc44b3SBram Moolenaar endif 1362efc44b3SBram Moolenaar 1372efc44b3SBram Moolenaar endfor 1382efc44b3SBram Moolenaar endfor 1392efc44b3SBram Moolenaar 1402efc44b3SBram Moolenaar finally 1412efc44b3SBram Moolenaar let &shell = shell_save 1422efc44b3SBram Moolenaar let &shellxquote = shellxquote_save 1432efc44b3SBram Moolenaar call delete('Xdir with spaces', 'rf') 1442efc44b3SBram Moolenaar endtry 1452efc44b3SBram Moolenaarendfunc 1460ff5dedfSBram Moolenaar 1470ff5dedfSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 148