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 line (w)
54 pp line (t)
55 pp line (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 line (d) | fgrep -o '{"cycle":'
130
131 pp asdl (d) | fgrep -o 'cycle ...'
132
133 ## STDOUT:
134 {"cycle":
135 cycle ...
136 ## END
137
138 #### pp line supports BashArray, BashAssoc
139
140 declare -a array=(a b c)
141 pp line (array)
142
143 array[5]=z
144 pp line (array)
145
146 declare -A assoc=([k]=v [k2]=v2)
147 pp line (assoc)
148
149 # I think assoc arrays can never null / unset
150
151 assoc['k3']=
152 pp line (assoc)
153
154 ## STDOUT:
155 {"type":"BashArray","data":{"0":"a","1":"b","2":"c"}}
156 {"type":"BashArray","data":{"0":"a","1":"b","2":"c","5":"z"}}
157 {"type":"BashAssoc","data":{"k":"v","k2":"v2"}}
158 {"type":"BashAssoc","data":{"k":"v","k2":"v2","k3":""}}
159 ## END
160
161
162 #### pp gc-stats
163
164 pp gc-stats
165
166 ## STDOUT:
167 ## END
168
169
170 #### pp cell
171 x=42
172
173 pp cell x
174 echo status=$?
175
176 pp -- cell :x
177 echo status=$?
178
179 pp cell nonexistent
180 echo status=$?
181 ## STDOUT:
182 x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42))
183 status=0
184 x = (Cell exported:F readonly:F nameref:F val:(value.Str s:42))
185 status=0
186 status=1
187 ## END
188
189 #### pp cell on indexed array with hole
190 declare -a array
191 array[3]=42
192 pp cell array
193 ## STDOUT:
194 array = (Cell exported:F readonly:F nameref:F val:(value.BashArray strs:[_ _ _ 42]))
195 ## END
196
197
198 #### pp proc
199 shopt --set ysh:upgrade
200
201 # This has to be a separate file because sh_spec.py strips comments!
202 . $REPO_ROOT/spec/testdata/doc-comments.sh
203
204 pp proc
205 echo ---
206
207 # print one
208 pp proc f
209
210 ## STDOUT:
211 proc_name doc_comment
212 f "doc ' comment with \" quotes"
213 g ""
214 myproc "YSH-style proc"
215 "true" "Special quoting rule"
216 ---
217 proc_name doc_comment
218 f "doc ' comment with \" quotes"
219 ## END
220
221
222 #### pp (x) is like = keyword
223
224 shopt --set ysh:upgrade
225 source $LIB_YSH/list.ysh
226
227 # It can be piped!
228
229 pp ('foo') | cat
230
231 pp ("isn't this sq") | cat
232
233 pp ('"dq $myvar"') | cat
234
235 pp (r'\ backslash \\') | cat
236
237 pp (u'one \t two \n') | cat
238
239 # Without a terminal, default width is 80
240 pp (repeat([123], 40)) | cat
241
242 ## STDOUT:
243 (Str) 'foo'
244 (Str) b'isn\'t this sq'
245 (Str) '"dq $myvar"'
246 (Str) b'\\ backslash \\\\'
247 (Str) b'one \t two \n'
248 (List)
249 [
250 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
251 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
252 123, 123, 123, 123, 123, 123, 123, 123, 123, 123
253 ]
254 ## END