OILS / spec / ysh-printing.test.sh View on Github | oils.pub

396 lines, 234 significant
1## oils_failures_allowed: 0
2
3#### Int
4= -123
5## STDOUT:
6(Int) -123
7## END
8
9#### Float
10= -0.00
11## STDOUT:
12(Float) -0.0
13## END
14
15#### Null
16= null
17## STDOUT:
18(Null) null
19## END
20
21#### Bool
22= true
23= false
24## STDOUT:
25(Bool) true
26(Bool) false
27## END
28
29#### String
30= "double quoted"
31= 'single quoted'
32## STDOUT:
33(Str) 'double quoted'
34(Str) 'single quoted'
35## END
36
37#### Range
38var x = 1..<100
39
40pp value (x)
41
42# TODO: show type here, like (Range 1 ..< 100)
43
44pp value ({k: x})
45
46echo
47
48pp test_ (x)
49pp test_ ({k: x})
50
51## STDOUT:
52(Range 1 ..< 100)
53(Dict) {k: (Range 1 ..< 100)}
54
55<Range>
56(Dict) {"k":<Range>}
57## END
58
59
60#### Eggex (reference type)
61var pat = /d+/
62
63remove-addr() {
64 sed 's/0x[0-9a-f]\+/0x---/'
65}
66
67pp value (pat) | remove-addr
68
69pp value ({k: pat}) | remove-addr
70
71# TODO: change this
72
73echo
74
75pp test_ (pat)
76pp test_ ({k: pat})
77
78## STDOUT:
79<Eggex 0x--->
80(Dict) {k: <Eggex 0x--->}
81
82<Eggex>
83(Dict) {"k":<Eggex>}
84## END
85
86#### BashArray, new representation for bash array
87declare -a empty=()
88declare -a array_1=(hello)
89array_1[5]=5
90
91pp value (empty)
92pp value (array_1)
93echo
94
95pp value ({k: empty})
96pp value ({k: array_1})
97echo
98
99pp test_ (empty)
100pp test_ (array_1)
101echo
102
103pp test_ ({k: empty})
104pp test_ ({k: array_1})
105
106## STDOUT:
107(BashArray)
108(BashArray [0]='hello' [5]='5')
109
110(Dict) {k: (BashArray)}
111(Dict) {k: (BashArray [0]='hello' [5]='5')}
112
113{"type":"BashArray","data":{}}
114{"type":"BashArray","data":{"0":"hello","5":"5"}}
115
116(Dict) {"k":{"type":"BashArray","data":{}}}
117(Dict) {"k":{"type":"BashArray","data":{"0":"hello","5":"5"}}}
118## END
119
120#### BashArray, short
121declare -a empty=()
122declare -a array_1=(hello)
123
124pp value (empty)
125pp value (array_1)
126echo
127
128pp value ({k: empty})
129pp value ({k: array_1})
130echo
131
132pp test_ (empty)
133pp test_ (array_1)
134echo
135
136pp test_ ({k: empty})
137pp test_ ({k: array_1})
138
139## STDOUT:
140(BashArray)
141(BashArray [0]='hello')
142
143(Dict) {k: (BashArray)}
144(Dict) {k: (BashArray [0]='hello')}
145
146{"type":"BashArray","data":{}}
147{"type":"BashArray","data":{"0":"hello"}}
148
149(Dict) {"k":{"type":"BashArray","data":{}}}
150(Dict) {"k":{"type":"BashArray","data":{"0":"hello"}}}
151## END
152
153#### BashArray, long
154declare -a array_3
155array_3[0]="world"
156array_3[2]=*.py
157declare array_long=(Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
158do eiusmod.)
159= array_3
160= array_long
161## STDOUT:
162(BashArray [0]='world' [2]='*.py')
163(BashArray
164 [0]='Lorem'
165 [1]='ipsum'
166 [2]='dolor'
167 [3]='sit'
168 [4]='amet,'
169 [5]='consectetur'
170 [6]='adipiscing'
171 [7]='elit,'
172 [8]='sed'
173 [9]='do'
174 [10]='eiusmod.'
175)
176## END
177
178#### BashAssoc, short
179declare -A empty
180declare -A assoc=(['k']=$'foo \x01\u03bc')
181
182pp value (empty)
183pp value (assoc)
184echo
185
186pp value ({k:empty})
187pp value ({k:assoc})
188echo
189
190pp test_ (empty)
191pp test_ (assoc)
192echo
193
194pp test_ ({k:empty})
195pp test_ ({k:assoc})
196
197## STDOUT:
198(BashAssoc)
199(BashAssoc ['k']=$'foo \u0001μ')
200
201(Dict) {k: (BashAssoc)}
202(Dict) {k: (BashAssoc ['k']=$'foo \u0001μ')}
203
204{"type":"BashAssoc","data":{}}
205{"type":"BashAssoc","data":{"k":"foo \u0001μ"}}
206
207(Dict) {"k":{"type":"BashAssoc","data":{}}}
208(Dict) {"k":{"type":"BashAssoc","data":{"k":"foo \u0001μ"}}}
209## END
210
211
212#### BashAssoc, long
213declare -A assoc_0=()
214declare -A assoc_1=([1]=one)
215declare -A assoc_3=([1]=one [two]=2 [3]=three)
216declare -A assoc_long=([Lorem]=ipsum [dolor]="sit amet," ['consectetur adipiscing']="elit, sed" [do]="eiusmod.")
217= assoc_0
218= assoc_1
219= assoc_3
220= assoc_long
221## STDOUT:
222(BashAssoc)
223(BashAssoc ['1']='one')
224(BashAssoc ['1']='one' ['two']='2' ['3']='three')
225(BashAssoc
226 ['Lorem']='ipsum'
227 ['dolor']='sit amet,'
228 ['consectetur adipiscing']='elit, sed'
229 ['do']='eiusmod.'
230)
231## END
232
233#### Simple Cycles
234var cyclic_array = ["one", "two", "three"]
235setvar cyclic_array[2] = cyclic_array
236var cyclic_dict = {"dead_end": null}
237setvar cyclic_dict["live_end"] = cyclic_dict
238= cyclic_array
239= cyclic_dict
240## STDOUT:
241(List) ['one', 'two', [...]]
242(Dict) {dead_end: null, live_end: {...}}
243## END
244
245#### Complex Cycles
246var dict = {}
247setvar dict["nothing"] = null
248var simple_cycle = [["dummy"]]
249setvar simple_cycle[0][0] = simple_cycle
250setvar dict["simple_cycle"] = simple_cycle
251var tricky_cycle = ["dummy"]
252setvar tricky_cycle[0] = dict
253setvar dict["tricky_cycle"] = tricky_cycle
254var dag = [1, 2, "dummy"]
255setvar dag[2] = dag
256setvar dict["dag"] = [dag, dag]
257var alpha = {}
258var omega = {}
259setvar alpha["omega"] = omega
260setvar omega["alpha"] = alpha
261setvar dict["key_alpha"] = alpha
262setvar dict["key_omega"] = omega
263= dict
264## STDOUT:
265(Dict)
266{
267 nothing: null,
268 simple_cycle: [[[...]]],
269 tricky_cycle: [{...}],
270 dag: [[1, 2, [...]], [1, 2, [...]]],
271 key_alpha: {omega: {alpha: {...}}},
272 key_omega: {alpha: {omega: {...}}}
273}
274## END
275
276#### pp test_: List cycle
277
278var no_cycle = [5, 6]
279pp test_ (no_cycle)
280
281var two = [no_cycle, no_cycle]
282pp test_ (two)
283#pp value (two)
284
285echo
286
287var L = [42]
288call L->append(L)
289pp test_ (L)
290#pp value (L)
291
292var two = [L, L]
293pp test_ (two)
294#pp value (two)
295
296## STDOUT:
297(List) [5,6]
298(List) [[5,6],[5,6]]
299
300(List) [42,[...]]
301(List) [[42,[...]],[42,[...]]]
302## END
303
304#### pp test_: Dict cycle
305
306var no_cycle = {z: 99}
307pp test_ (no_cycle)
308
309var two = [no_cycle, no_cycle]
310pp test_ (two)
311
312#pp value (two)
313
314echo
315
316var d = {k: 42}
317setvar d.cycle = d
318pp test_ (d)
319#pp value (d)
320
321var two = [d, d]
322pp test_ (two)
323#pp value (two)
324
325
326## STDOUT:
327(Dict) {"z":99}
328(List) [{"z":99},{"z":99}]
329
330(Dict) {"k":42,"cycle":{...}}
331(List) [{"k":42,"cycle":{...}},{"k":42,"cycle":{...}}]
332## END
333
334#### pp: Obj cycle
335
336var methods = Object(null, {__foo__: null})
337var obj = Object(methods, {z: 99})
338pp test_ (obj)
339pp value (obj)
340echo
341
342setvar obj.cycle = obj
343pp test_ (obj)
344pp value (obj)
345
346echo
347
348var two = [obj, obj]
349pp test_ (two)
350
351## STDOUT:
352(Obj) ("z":99) --> ("__foo__":null)
353(Obj) (z: 99) --> (__foo__: null)
354
355(Obj) ("z":99,"cycle":(...)) --> ("__foo__":null)
356(Obj) (z: 99, cycle: (...)) --> (__foo__: null)
357
358(List) [("z":99,"cycle":(...)) --> ("__foo__":null),("z":99,"cycle":(...)) --> ("__foo__":null)]
359## END
360
361
362
363#### pp test_: Obj with dict cycle
364
365var methods = Object(null, {__foo__: null})
366var no_cycle = Object(methods, {z: 99})
367pp test_ (no_cycle)
368
369var two = [no_cycle, no_cycle]
370pp test_ (two)
371
372echo
373
374var d = {k: 42}
375setvar d.cycle = d
376
377# This cycle detection doesn't quite work
378# Because we're only considering the object itself
379
380var o = Object(null, d)
381pp test_ (o)
382
383var two = [o, o]
384pp test_ (two)
385
386#var o2 = Object(o, {z: 99})
387#pp test_ (o2)
388
389## STDOUT:
390(Obj) ("z":99) --> ("__foo__":null)
391(List) [("z":99) --> ("__foo__":null),("z":99) --> ("__foo__":null)]
392
393(Obj) ("k":42,"cycle":{"k":42,"cycle":{...}})
394(List) [("k":42,"cycle":{"k":42,"cycle":{...}}),("k":42,"cycle":{"k":42,"cycle":{...}})]
395## END
396