1 | ## oils_failures_allowed: 1
|
2 |
|
3 | #### runproc
|
4 | shopt --set parse_proc parse_at
|
5 |
|
6 | f() {
|
7 | write -- f "$@"
|
8 | }
|
9 | proc p {
|
10 | write -- p @ARGV
|
11 | }
|
12 | runproc f 1 2
|
13 | echo status=$?
|
14 |
|
15 | runproc p 3 4
|
16 | echo status=$?
|
17 |
|
18 | runproc invalid 5 6
|
19 | echo status=$?
|
20 |
|
21 | runproc
|
22 | echo status=$?
|
23 |
|
24 | ## STDOUT:
|
25 | f
|
26 | 1
|
27 | 2
|
28 | status=0
|
29 | p
|
30 | 3
|
31 | 4
|
32 | status=0
|
33 | status=1
|
34 | status=2
|
35 | ## END
|
36 |
|
37 |
|
38 | #### runproc typed args
|
39 | shopt --set parse_brace parse_proc
|
40 |
|
41 | proc p {
|
42 | echo 'hi from p'
|
43 | }
|
44 |
|
45 | # The block is ignored for now
|
46 | runproc p {
|
47 | echo myblock
|
48 | }
|
49 | echo
|
50 |
|
51 | proc ty (w; t; n; block) {
|
52 | echo 'ty'
|
53 | pp test_ (w)
|
54 | pp test_ (t)
|
55 | pp test_ (n)
|
56 | echo $[type(block)]
|
57 | }
|
58 |
|
59 | ty a (42; n=99; ^(echo ty))
|
60 | echo
|
61 |
|
62 | runproc ty a (42; n=99; ^(echo ty))
|
63 | echo
|
64 |
|
65 | runproc ty a (42; n=99) {
|
66 | echo 'ty gets literal'
|
67 | }
|
68 |
|
69 | # TODO: Command vs. Block vs. Literal Block should be unified
|
70 |
|
71 | ## STDOUT:
|
72 | hi from p
|
73 |
|
74 | ty
|
75 | (Str) "a"
|
76 | (Int) 42
|
77 | (Int) 99
|
78 | Command
|
79 |
|
80 | ty
|
81 | (Str) "a"
|
82 | (Int) 42
|
83 | (Int) 99
|
84 | Command
|
85 |
|
86 | ty
|
87 | (Str) "a"
|
88 | (Int) 42
|
89 | (Int) 99
|
90 | Block
|
91 | ## END
|
92 |
|
93 |
|
94 | #### pp asdl_
|
95 |
|
96 | shopt -s ysh:upgrade
|
97 |
|
98 | fopen >out.txt {
|
99 | x=42
|
100 | setvar y = {foo: x}
|
101 |
|
102 | pp asdl_ (x)
|
103 | pp asdl_ (y)
|
104 |
|
105 | # TODO, this might be nice?
|
106 | # pp asdl_ (x, y)
|
107 | }
|
108 |
|
109 | # Two lines with value.Str
|
110 | grep -n -o value.Str out.txt
|
111 |
|
112 | # Dict should have an address
|
113 | #grep -n -o 'Dict 0x' out.txt
|
114 |
|
115 | #cat out.txt
|
116 |
|
117 | ## STDOUT:
|
118 | 1:value.Str
|
119 | 2:value.Str
|
120 | ## END
|
121 |
|
122 | #### pp asdl_ can handle an object cycle
|
123 |
|
124 | shopt -s ysh:upgrade
|
125 |
|
126 | var d = {}
|
127 | setvar d.cycle = d
|
128 |
|
129 | pp test_ (d) | fgrep -o '{"cycle":'
|
130 |
|
131 | pp asdl_ (d) | fgrep -o 'cycle ...'
|
132 |
|
133 | ## STDOUT:
|
134 | {"cycle":
|
135 | cycle ...
|
136 | ## END
|
137 |
|
138 |
|
139 | #### pp gc-stats_
|
140 |
|
141 | pp gc-stats_
|
142 |
|
143 | ## STDOUT:
|
144 | ## END
|
145 |
|
146 |
|
147 | #### pp cell_
|
148 | x=42
|
149 |
|
150 | pp cell_ x
|
151 | echo status=$?
|
152 |
|
153 | pp -- cell_ x
|
154 | echo status=$?
|
155 |
|
156 | pp cell_ nonexistent
|
157 | echo status=$?
|
158 | ## STDOUT:
|
159 | x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42))
|
160 | status=0
|
161 | x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42))
|
162 | status=0
|
163 | status=1
|
164 | ## END
|
165 |
|
166 | #### pp cell_ on indexed array with hole
|
167 | declare -a array
|
168 | array[3]=42
|
169 | pp cell_ array
|
170 | ## STDOUT:
|
171 | array = (Cell exported:F readonly:F nameref:F val:(value.BashArray strs:[_ _ _ 42]))
|
172 | ## END
|
173 |
|
174 |
|
175 | #### pp proc
|
176 | shopt --set ysh:upgrade
|
177 |
|
178 | # This has to be a separate file because sh_spec.py strips comments!
|
179 | . $REPO_ROOT/spec/testdata/doc-comments.sh
|
180 |
|
181 | pp proc
|
182 | echo ---
|
183 |
|
184 | # print one
|
185 | pp proc f
|
186 |
|
187 | ## STDOUT:
|
188 | proc_name doc_comment
|
189 | f "doc ' comment with \" quotes"
|
190 | g ""
|
191 | myproc "YSH-style proc"
|
192 | "true" "Special quoting rule"
|
193 | ---
|
194 | proc_name doc_comment
|
195 | f "doc ' comment with \" quotes"
|
196 | ## END
|
197 |
|
198 | #### pp (x) and pp [x] quote code
|
199 |
|
200 | pp (42)
|
201 |
|
202 | shopt --set ysh:upgrade
|
203 |
|
204 | pp [42]
|
205 |
|
206 | ## STDOUT:
|
207 |
|
208 | pp (42)
|
209 | ^
|
210 | [ stdin ]:1: (Int) 42
|
211 |
|
212 | pp [42]
|
213 | ^
|
214 | [ stdin ]:5: (Int) 42
|
215 | ## END
|
216 |
|
217 | #### pp test_ supports BashArray, BashAssoc
|
218 |
|
219 | declare -a array=(a b c)
|
220 | pp test_ (array)
|
221 |
|
222 | array[5]=z
|
223 | pp test_ (array)
|
224 |
|
225 | declare -A assoc=([k]=v [k2]=v2)
|
226 | pp test_ (assoc)
|
227 |
|
228 | # I think assoc arrays can never null / unset
|
229 |
|
230 | assoc['k3']=
|
231 | pp test_ (assoc)
|
232 |
|
233 | ## STDOUT:
|
234 | {"type":"BashArray","data":{"0":"a","1":"b","2":"c"}}
|
235 | {"type":"BashArray","data":{"0":"a","1":"b","2":"c","5":"z"}}
|
236 | {"type":"BashAssoc","data":{"k":"v","k2":"v2"}}
|
237 | {"type":"BashAssoc","data":{"k":"v","k2":"v2","k3":""}}
|
238 | ## END
|
239 |
|
240 | #### pp value (x) is like = keyword
|
241 |
|
242 | shopt --set ysh:upgrade
|
243 | source $LIB_YSH/list.ysh
|
244 |
|
245 | # It can be piped!
|
246 |
|
247 | pp value ('foo') | cat
|
248 |
|
249 | pp value ("isn't this sq") | cat
|
250 |
|
251 | pp value ('"dq $myvar"') | cat
|
252 |
|
253 | pp value (r'\ backslash \\') | cat
|
254 |
|
255 | pp value (u'one \t two \n') | cat
|
256 |
|
257 | # Without a terminal, default width is 80
|
258 | pp value (repeat([123], 40)) | cat
|
259 |
|
260 | ## STDOUT:
|
261 | (Str) 'foo'
|
262 | (Str) b'isn\'t this sq'
|
263 | (Str) '"dq $myvar"'
|
264 | (Str) b'\\ backslash \\\\'
|
265 | (Str) b'one \t two \n'
|
266 | (List)
|
267 | [
|
268 | 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
|
269 | 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
|
270 | 123, 123, 123, 123, 123, 123, 123, 123, 123, 123
|
271 | ]
|
272 | ## END
|