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 |
|