1
0
forked from aniani/vim

patch 8.1.2092: MS-Windows: redirect in system() does not work

Problem:    MS-Windows: redirect in system() does not work.
Solution:   Handle 'shellxescape' and 'shellxquote' better. (Yasuhiro
            Matsumoto, closes #2054)
This commit is contained in:
Bram Moolenaar
2019-09-28 15:51:37 +02:00
parent 0f1c6708fd
commit 1a61339806
4 changed files with 61 additions and 28 deletions

View File

@@ -3,9 +3,24 @@
source shared.vim
func Test_System()
if !executable('echo') || !executable('cat') || !executable('wc')
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", system('more', '123'))
call assert_equal(["123"], systemlist('more', '123'))
call assert_equal(["as\<NL>df"], systemlist('more', ["as\<NL>df"]))
endif
if !executable('cat') || !executable('wc')
return
endif
let out = 'echo 123'->system()
" On Windows we may get a trailing space.
if out != "123 \n"
@@ -13,14 +28,17 @@ func Test_System()
endif
let out = 'echo 123'->systemlist()
" On Windows we may get a trailing space and CR.
if out != ["123 \r"]
call assert_equal(['123'], out)
if !has('win32')
call assert_equal(["123"], out)
else
call assert_equal(["123\r"], 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"]))
if executable('cat')
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"]))
endif
new Xdummy
call setline(1, ['asdf', "pw\<NL>er", 'xxxx'])
@@ -39,9 +57,11 @@ func Test_System()
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"]
if !has('win32')
let out = systemlist('cat', bufnr('%'))
call assert_equal(['asdf', "pw\<NL>er", 'xxxx'], out)
else
let out = systemlist('more', bufnr('%'))
call assert_equal(['asdf', "pw\<NL>er", 'xxxx'], out)
endif
bwipe!