xref: /vim-8.2.3635/src/testdir/test_system.vim (revision 054794c2)
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