OILS / spec / ble-unset.test.sh View on Github | oils.pub

243 lines, 107 significant
1## compare_shells: bash zsh mksh ash dash yash
2## oils_failures_allowed: 0
3
4# Some tests moved here for spec/ble-features
5# We could move others too
6
7#### [bash_unset] nested context by tempenv-eval
8f1() {
9 local v=local1
10 echo "[$1,local1] v: ${v-(unset)}"
11 v=tempenv2 eval '
12 echo "[$1,local1,tempenv2,(eval)] v: ${v-(unset)}"
13 local v=local2
14 echo "[$1,local1,tempenv2,(eval),local2] v: ${v-(unset)}"
15 '
16 echo "[$1,local1] v: ${v-(unset)} (after)"
17}
18v=global
19v=tempenv1 f1 global,tempenv1
20
21## OK bash/zsh STDOUT:
22# localvar-nest yes
23[global,tempenv1,local1] v: local1
24[global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
25[global,tempenv1,local1,tempenv2,(eval),local2] v: local2
26[global,tempenv1,local1] v: local1 (after)
27## END
28
29## STDOUT:
30# localvar-nest no
31[global,tempenv1,local1] v: local1
32[global,tempenv1,local1,tempenv2,(eval)] v: tempenv2
33[global,tempenv1,local1,tempenv2,(eval),local2] v: local2
34[global,tempenv1,local1] v: local2 (after)
35## END
36
37#### [bash_unset] local-unset / dynamic-unset for localvar on nested-context
38unlocal() { unset -v "$1"; }
39
40f2() {
41 local v=local1
42 v=tempenv2 eval '
43 local v=local2
44 (unset v ; echo "[$1,local1,tempenv2,(eval),local2,(unset)] v: ${v-(unset)}")
45 (unlocal v; echo "[$1,local1,tempenv2,(eval),local2,(unlocal)] v: ${v-(unset)}")
46 '
47}
48v=global
49v=tempenv1 f2 global,tempenv1
50
51## OK bash STDOUT:
52# bash-unset (bash-5.1)
53[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
54[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
55## END
56
57# Note that bash-4.3 to bash 5.0 behave differently
58# [global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: local1
59# [global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: local1
60
61## OK-2 zsh/ash/dash STDOUT:
62# always-value-unset
63[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: (unset)
64[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: (unset)
65## END
66
67## STDOUT:
68# always-cell-unset (remove all localvar/tempenv)
69[global,tempenv1,local1,tempenv2,(eval),local2,(unset)] v: tempenv1
70[global,tempenv1,local1,tempenv2,(eval),local2,(unlocal)] v: tempenv1
71## END
72
73#### [bash_unset] dynamic-unset for nested localvars
74unlocal() { unset -v "$1"; }
75
76f3() {
77 local v=local1
78 v=tempenv2 eval '
79 local v=local2
80 v=tempenv3 eval "
81 local v=local3
82 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)}\"
83 unlocal v
84 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 1)\"
85 unlocal v
86 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 2)\"
87 unlocal v
88 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 3)\"
89 unlocal v
90 echo \"[\$1/local1,tempenv2/local2,tempenv3/local3] v: \${v-(unset)} (unlocal 4)\"
91 "
92 '
93}
94v=global
95v=tempenv1 f3 global,tempenv1
96
97## OK bash STDOUT:
98# cell-unset x localvar-tempenv-share x tempenv-in-localctx
99[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
100[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local2 (unlocal 1)
101[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local1 (unlocal 2)
102[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 3)
103[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
104## END
105
106## OK-2 zsh/ash/dash STDOUT:
107# value-unset
108[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
109[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 1)
110[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
111[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
112[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
113## END
114
115## STDOUT:
116# cell-unset (remove all localvar)
117[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
118[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
119[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: global (unlocal 2)
120[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
121[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
122## END
123
124## OK-3 mksh STDOUT:
125# cell-unset (remove all localvar/tempenv) x tempenv-value-unset
126[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: local3
127[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: tempenv1 (unlocal 1)
128[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 2)
129[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 3)
130[global,tempenv1/local1,tempenv2/local2,tempenv3/local3] v: (unset) (unlocal 4)
131## END
132
133
134#### [bash_unset] dynamic-unset for nested tempenvs
135unlocal() { unset -v "$1"; }
136
137f4_unlocal() {
138 v=tempenv2 eval '
139 v=tempenv3 eval "
140 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
141 unlocal v
142 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 1)\"
143 unlocal v
144 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 2)\"
145 unlocal v
146 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 3)\"
147 unlocal v
148 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unlocal 4)\"
149 "
150 '
151}
152v=global
153v=tempenv1 f4_unlocal global,tempenv1
154
155## OK bash STDOUT:
156[global,tempenv1,tempenv2,tempenv3] v: tempenv3
157[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unlocal 1)
158[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 2)
159[global,tempenv1,tempenv2,tempenv3] v: global (unlocal 3)
160[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
161## END
162
163## STDOUT:
164# value-unset, mksh-unset
165[global,tempenv1,tempenv2,tempenv3] v: tempenv3
166[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
167[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
168[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
169[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
170## END
171
172## OK-3 osh STDOUT:
173# cell-unset
174[global,tempenv1,tempenv2,tempenv3] v: tempenv3
175[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unlocal 1)
176[global,tempenv1,tempenv2,tempenv3] v: global (unlocal 2)
177[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
178[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
179## END
180
181## OK-2 yash STDOUT:
182# remove all tempenv3
183[global,tempenv1,tempenv2,tempenv3] v: tempenv3
184[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 1)
185[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 2)
186[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 3)
187[global,tempenv1,tempenv2,tempenv3] v: (unset) (unlocal 4)
188## END
189
190#### [bash_unset] local-unset for nested tempenvs
191f4_unset() {
192 v=tempenv2 eval '
193 v=tempenv3 eval "
194 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)}\"
195 unset v
196 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 1)\"
197 unset v
198 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 2)\"
199 unset v
200 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 3)\"
201 unset v
202 echo \"[\$1,tempenv2,tempenv3] v: \${v-(unset)} (unset 4)\"
203 "
204 '
205}
206v=global
207v=tempenv1 f4_unset global,tempenv1
208
209## OK bash STDOUT:
210[global,tempenv1,tempenv2,tempenv3] v: tempenv3
211[global,tempenv1,tempenv2,tempenv3] v: tempenv2 (unset 1)
212[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 2)
213[global,tempenv1,tempenv2,tempenv3] v: global (unset 3)
214[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
215## END
216
217## STDOUT:
218# value-unset, mksh-unset, tempenv-value-unset?
219[global,tempenv1,tempenv2,tempenv3] v: tempenv3
220[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
221[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
222[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
223[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
224## END
225
226## OK-2 osh STDOUT:
227# cell-unset
228[global,tempenv1,tempenv2,tempenv3] v: tempenv3
229[global,tempenv1,tempenv2,tempenv3] v: tempenv1 (unset 1)
230[global,tempenv1,tempenv2,tempenv3] v: global (unset 2)
231[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
232[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
233## END
234
235## BUG yash STDOUT:
236# value-unset? inconsistent with other test cases
237[global,tempenv1,tempenv2,tempenv3] v: tempenv3
238[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 1)
239[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 2)
240[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 3)
241[global,tempenv1,tempenv2,tempenv3] v: (unset) (unset 4)
242## END
243