1 ## our_shell: osh
2 ## oils_failures_allowed: 2
3 # compare_shells: bash
4
5 #### Can't use x+= on YSH Int (issue #840)
6
7 sh_str=2
8 echo sh_str=$sh_str
9
10 sh_str+=1
11 echo sh_str=$sh_str
12
13 sh_str+=1
14 echo sh_str=$sh_str
15
16 echo
17
18 var ysh_int = 2
19 echo ysh_int=$ysh_int
20
21 # What should happen here?
22
23 ysh_int+=1
24 echo ysh_int=$ysh_int
25
26 ysh_int+=1
27 echo ysh_int=$ysh_int
28
29 ## status: 1
30 ## STDOUT:
31 sh_str=2
32 sh_str=21
33 sh_str=211
34
35 ysh_int=2
36 ## END
37
38 #### Can't x+= on other YSH types
39
40 $SH -c '
41 var x = /d+/
42 x+=1
43 '
44 echo eggex $?
45
46 $SH -c '
47 var d = {}
48 d+=1
49 '
50 echo Dict $?
51
52 # This is unspecified for now, could try to match bash
53 $SH -c '
54 declare -A A=()
55 A+=1
56 declare -A
57 '
58 #echo AssocArray $?
59
60 ## STDOUT:
61 eggex 1
62 Dict 1
63 ## END
64
65 #### Shell ${x:-default} with YSH List (issue #954)
66
67 var mylist = [1, 2, 3]
68
69 echo mylist ${mylist:-default}
70
71 var myint = 42
72
73 echo myint ${myint:-default}
74
75 ## STDOUT:
76 ## END
77
78
79 #### Shell ${a[0]} with YSH List (issue #1092)
80
81 var a = [1, 2, 3]
82 echo first ${a[0]}
83
84 ## STDOUT:
85 ## END
86
87
88 #### Can't splice nested List
89
90 shopt --set parse_at
91
92 var mylist = ["ls", {name: 42}]
93
94 echo @mylist
95
96 ## status: 3
97 ## STDOUT:
98 ## END
99
100 #### Can't splice nested Dict
101
102 declare -A A=([k]=v [k2]=v2)
103 echo ${A[@]}
104
105 var d ={name: [1, 2, 3]}
106 echo ${d[@]}
107
108 ## status: 3
109 ## STDOUT:
110 v v2
111 ## END
112
113 #### ${#x} on List and Dict
114
115 var L = [1,2,3]
116
117 echo List ${#L[@]}
118 echo List ${#L}
119 # Not supported. TODO: could be a problem
120 #echo List ${#L[0]}
121
122 declare -a a=(abc d)
123
124 echo array ${#a[@]}
125 echo array ${#a}
126 echo array ${#a[0]}
127
128 var d = {k: 'v', '0': 'abc'}
129
130 echo Dict ${#d[@]}
131 echo Dict ${#d}
132 # Not supported. TODO: could be a problem
133 #echo Dict ${#d[0]}
134
135 declare -A d=([k]=v [0]=abc)
136
137 echo Assoc ${#d[@]}
138 echo Assoc ${#d}
139 echo Assoc ${#d[0]}
140
141 ## status: 3
142 ## STDOUT:
143 ## END
144
145 #### Can't use $x on List and Dict
146
147 declare -a a=(abc d)
148 echo array $a
149 echo array ${a[0]}
150
151 var L = [1,2,3]
152 echo List $L
153
154 declare -A A=([k]=v [0]=abc)
155 echo Assoc $A
156 echo Assoc ${A[0]}
157
158 var d = {k: 'v', '0': 'abc'}
159 #echo Dict $d
160
161 ## status: 3
162 ## STDOUT:
163 array abc
164 array abc
165 ## END
166
167 #### Iterate over array with holes (bug fix)
168
169 declare -a array=(a b)
170 array[5]=c
171 argv.py "${array[@]}"
172
173 # TODO: Should print this like this bash, with value.BashArray
174 declare -a
175
176 for i, item in (array) {
177 echo "$i $item"
178 }
179
180 ## status: 3
181 ## STDOUT:
182 ['a', 'b', 'c']
183 array=(); array[0]=a array[1]=b array[5]=c
184 ## END
185
186 #### Slice bash array isn't allowed
187
188 shopt --set parse_at
189
190 var ysh = :| ysh 'c d' e f |
191 var yslice = ysh[1:3]
192 argv.py @yslice
193
194 declare -a bash=(bash 'c d' e f)
195
196 # You can copy it and then slice it
197 var ysh2 = :| copy "${bash[@]}" |
198 var yslice = ysh2[0:2]
199 argv.py @yslice
200
201 # Note this
202 var sh_slice = bash[1:3]
203 argv.py @sh_slice
204
205 ## status: 3
206 ## STDOUT:
207 ['c d', 'e']
208 ['copy', 'bash']
209 ## END
210
211 #### Concat ++ not defined on shell array
212
213 declare -a a=(x y)
214 declare -a b=(x y)
215
216 = a ++ b
217
218 ## status: 3
219 ## STDOUT:
220 ## END