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)
diff --git a/src/testdir/test_system.vim b/src/testdir/test_system.vim
index deee51f..22aceb7 100644
--- a/src/testdir/test_system.vim
+++ b/src/testdir/test_system.vim
@@ -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 @@
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 @@
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!