Mercurial > vim
comparison src/testdir/test_shell.vim @ 25048:82ae6fcd86c8 v8.2.3061
patch 8.2.3061: testing the shell option is incomplete and spread out
Commit: https://github.com/vim/vim/commit/054794c20f6322bbd9482c4124041dc0a140c78e
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Sun Jun 27 12:07:49 2021 +0200
patch 8.2.3061: testing the shell option is incomplete and spread out
Problem: Testing the shell option is incomplete and spread out.
Solution: Move shell tests to one file and increase coverage. (Yegappan
Lakshmanan, closes #8464)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 27 Jun 2021 12:15:03 +0200 |
parents | |
children | 4c366bbf6073 |
comparison
equal
deleted
inserted
replaced
25047:0ea3ceb86a0d | 25048:82ae6fcd86c8 |
---|---|
1 " Test for the shell related options ('shell', 'shellcmdflag', 'shellpipe', | |
2 " 'shellquote', 'shellredir', 'shellxescape', and 'shellxquote') | |
3 | |
4 source check.vim | |
5 source shared.vim | |
6 | |
7 func Test_shell_options() | |
8 " For each shell, the following options are checked: | |
9 " 'shellcmdflag', 'shellpipe', 'shellquote', 'shellredir', 'shellxescape', | |
10 " 'shellxquote' | |
11 let shells = [] | |
12 if has('unix') | |
13 let shells += [['sh', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
14 \ ['ksh', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
15 \ ['mksh', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
16 \ ['zsh', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
17 \ ['zsh-beta', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
18 \ ['bash', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
19 \ ['fish', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
20 \ ['ash', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
21 \ ['dash', '-c', '2>&1| tee', '', '>%s 2>&1', '', ''], | |
22 \ ['csh', '-c', '|& tee', '', '>&', '', ''], | |
23 \ ['tcsh', '-c', '|& tee', '', '>&', '', '']] | |
24 endif | |
25 if has('win32') | |
26 let shells += [['cmd', '/c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', ''], | |
27 \ ['cmd.exe', '/c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '('], | |
28 \ ['powershell.exe', '-c', '>', '', '>', '"&|<>()@^', '"'], | |
29 \ ['powershell', '-c', '>', '', '>', '"&|<>()@^', '"'], | |
30 \ ['sh.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
31 \ ['ksh.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
32 \ ['mksh.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
33 \ ['pdksh.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
34 \ ['zsh.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
35 \ ['zsh-beta.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
36 \ ['bash.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
37 \ ['dash.exe', '-c', '>%s 2>&1', '', '>%s 2>&1', '"&|<>()@^', '"'], | |
38 \ ['csh.exe', '-c', '>&', '', '>&', '"&|<>()@^', '"'], | |
39 \ ['tcsh.exe', '-c', '>&', '', '>&', '"&|<>()@^', '"']] | |
40 endif | |
41 | |
42 let after =<< trim END | |
43 let l = [&shell, &shellcmdflag, &shellpipe, &shellquote] | |
44 let l += [&shellredir, &shellxescape, &shellxquote] | |
45 call writefile([json_encode(l)], 'Xtestout') | |
46 qall! | |
47 END | |
48 for e in shells | |
49 if RunVim([], after, '--cmd "set shell=' .. e[0] .. '"') | |
50 call assert_equal(e, json_decode(readfile('Xtestout')[0])) | |
51 endif | |
52 endfor | |
53 | |
54 for e in shells | |
55 exe 'set shell=' .. e[0] | |
56 if e[0] =~# '.*csh$' || e[0] =~# '.*csh.exe$' | |
57 let str1 = "'cmd \"arg1\" '\\''arg2'\\'' \\!%#'" | |
58 let str2 = "'cmd \"arg1\" '\\''arg2'\\'' \\\\!\\%\\#'" | |
59 else | |
60 let str1 = "'cmd \"arg1\" '\\''arg2'\\'' !%#'" | |
61 let str2 = "'cmd \"arg1\" '\\''arg2'\\'' \\!\\%\\#'" | |
62 endif | |
63 call assert_equal(str1, shellescape("cmd \"arg1\" 'arg2' !%#"), e[0]) | |
64 call assert_equal(str2, shellescape("cmd \"arg1\" 'arg2' !%#", 1), e[0]) | |
65 endfor | |
66 set shell& | |
67 call delete('Xtestout') | |
68 endfunc | |
69 | |
70 " Test for the 'shell' option | |
71 func Test_shell() | |
72 CheckUnix | |
73 let save_shell = &shell | |
74 set shell= | |
75 let caught_e91 = 0 | |
76 try | |
77 shell | |
78 catch /E91:/ | |
79 let caught_e91 = 1 | |
80 endtry | |
81 call assert_equal(1, caught_e91) | |
82 let &shell = save_shell | |
83 endfunc | |
84 | |
85 " Test for the 'shellquote' option | |
86 func Test_shellquote() | |
87 CheckUnix | |
88 set shellquote=# | |
89 set verbose=20 | |
90 redir => v | |
91 silent! !echo Hello | |
92 redir END | |
93 set verbose& | |
94 set shellquote& | |
95 call assert_match(': "#echo Hello#"', v) | |
96 endfunc | |
97 | |
98 func Test_shellescape() | |
99 let save_shell = &shell | |
100 set shell=bash | |
101 call assert_equal("'text'", shellescape('text')) | |
102 call assert_equal("'te\"xt'", 'te"xt'->shellescape()) | |
103 call assert_equal("'te'\\''xt'", shellescape("te'xt")) | |
104 | |
105 call assert_equal("'te%xt'", shellescape("te%xt")) | |
106 call assert_equal("'te\\%xt'", shellescape("te%xt", 1)) | |
107 call assert_equal("'te#xt'", shellescape("te#xt")) | |
108 call assert_equal("'te\\#xt'", shellescape("te#xt", 1)) | |
109 call assert_equal("'te!xt'", shellescape("te!xt")) | |
110 call assert_equal("'te\\!xt'", shellescape("te!xt", 1)) | |
111 | |
112 call assert_equal("'te\nxt'", shellescape("te\nxt")) | |
113 call assert_equal("'te\\\nxt'", shellescape("te\nxt", 1)) | |
114 set shell=tcsh | |
115 call assert_equal("'te\\!xt'", shellescape("te!xt")) | |
116 call assert_equal("'te\\\\!xt'", shellescape("te!xt", 1)) | |
117 call assert_equal("'te\\\nxt'", shellescape("te\nxt")) | |
118 call assert_equal("'te\\\\\nxt'", shellescape("te\nxt", 1)) | |
119 | |
120 let &shell = save_shell | |
121 endfunc | |
122 | |
123 " Test for 'shellxquote' | |
124 func Test_shellxquote() | |
125 CheckUnix | |
126 | |
127 let save_shell = &shell | |
128 let save_sxq = &shellxquote | |
129 let save_sxe = &shellxescape | |
130 | |
131 call writefile(['#!/bin/sh', 'echo "Cmd: [$*]" > Xlog'], 'Xtestshell') | |
132 call setfperm('Xtestshell', "r-x------") | |
133 set shell=./Xtestshell | |
134 | |
135 set shellxquote=\\" | |
136 call feedkeys(":!pwd\<CR>\<CR>", 'xt') | |
137 call assert_equal(['Cmd: [-c "pwd"]'], readfile('Xlog')) | |
138 | |
139 set shellxquote=( | |
140 call feedkeys(":!pwd\<CR>\<CR>", 'xt') | |
141 call assert_equal(['Cmd: [-c (pwd)]'], readfile('Xlog')) | |
142 | |
143 set shellxquote=\\"( | |
144 call feedkeys(":!pwd\<CR>\<CR>", 'xt') | |
145 call assert_equal(['Cmd: [-c "(pwd)"]'], readfile('Xlog')) | |
146 | |
147 set shellxescape=\"&<<()@^ | |
148 set shellxquote=( | |
149 call feedkeys(":!pwd\"&<<{}@^\<CR>\<CR>", 'xt') | |
150 call assert_equal(['Cmd: [-c (pwd^"^&^<^<{}^@^^)]'], readfile('Xlog')) | |
151 | |
152 let &shell = save_shell | |
153 let &shellxquote = save_sxq | |
154 let &shellxescape = save_sxe | |
155 call delete('Xtestshell') | |
156 call delete('Xlog') | |
157 endfunc | |
158 | |
159 " vim: shiftwidth=2 sts=2 expandtab |