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 (BashArray) ["a","b","c"]
156 (BashArray) ["a","b","c",null,null,"z"]
157 (BashAssoc) {"k":"v","k2":"v2"}
158 (BashAssoc) {"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