view src/testdir/test_system.vim @ 16150:b23048205589 v8.1.1080

patch 8.1.1080: when a screendump test fails, moving the file is a hassle commit https://github.com/vim/vim/commit/ef7f0e367eeaf6fb31b1caa0e3de1a4b07e86af3 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 30 15:59:51 2019 +0100 patch 8.1.1080: when a screendump test fails, moving the file is a hassle Problem: When a screendump test fails, moving the file is a hassle. Solution: Instead of appending ".failed" to the file name, keep the same file name but put the screendump in the "failed" directory. Then the file name only needs to be typed once when moving a screendump.
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Mar 2019 16:00:06 +0100
parents 63b02fcf1361
children 4c7097a980a5
line wrap: on
line source

" Tests for system() and systemlist()

func Test_System()
  if !executable('echo') || !executable('cat') || !executable('wc')
    return
  endif
  let out = system('echo 123')
  " On Windows we may get a trailing space.
  if out != "123 \n"
    call assert_equal("123\n", out)
  endif

  let out = systemlist('echo 123')
  " On Windows we may get a trailing space and CR.
  if out != ["123 \r"]
    call assert_equal(['123'], out)
  endif

  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"]))

  new Xdummy
  call setline(1, ['asdf', "pw\<NL>er", 'xxxx'])
  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

  let out = systemlist('cat', bufnr('%'))
  " On Windows we may get a trailing CR.
  if out != ["asdf\r", "pw\<NL>er\r", "xxxx\r"]
    call assert_equal(['asdf', "pw\<NL>er", 'xxxx'],  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 -u NONE -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')
    let a = system(v:progpath . 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(v:progpath . cmd)
    call assert_notequal('0', a[0])
  endif

  let cmd = ' -es -u NONE -c "source Xscript" +q'
  let a = system(v:progpath . cmd)
  call assert_notequal(0, v:shell_error)
  call delete('Xscript')

  if has('unix') " echo $? only works on Unix
    let cmd = ' -es -u NONE -c "call doesnotexist()" +q; echo $?'
    let a = system(v:progpath. cmd)
    call assert_notequal(0, a[0])
  endif

  let cmd = ' -es -u NONE -c "call doesnotexist()" +q'
  let a = system(v:progpath. cmd)
  call assert_notequal(0, v:shell_error)

  if has('unix') " echo $? only works on Unix
    let cmd = ' -es -u NONE -c "call doesnotexist()|let a=1" +q; echo $?'
    let a = system(v:progpath. cmd)
    call assert_notequal(0, a[0])
  endif

  let cmd = ' -es -u NONE -c "call doesnotexist()|let a=1" +q'
  let a = system(v:progpath. cmd)
  call assert_notequal(0, v:shell_error)
endfunc