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

114 lines, 50 significant
1## our_shell: ysh
2
3# Test YSH expressions within $[]
4
5#### $[f(x)]
6var a = %(a b c)
7echo $[len(a)]
8## STDOUT:
93
10## END
11
12#### $[d['key']]
13var d = {}
14setvar d['key'] = 42
15echo $[d['key']]
16## STDOUT:
1742
18## END
19
20#### $[d.key]
21var d = {}
22setvar d['key'] = 42
23echo $[d.key]
24## STDOUT:
2542
26## END
27
28#### In Double quotes
29var a = %(a b c)
30var obj = /d+/
31var d = {}
32setvar d['key'] = 42
33echo "func $[len(a)]"
34echo "key $[d['key']]"
35echo "key $[d.key]"
36echo "dq $[d["key"]]"
37## STDOUT:
38func 3
39key 42
40key 42
41dq 42
42## END
43
44#### @[expr_splice] in expression mode
45
46# In addition to:
47# write -- @[x]
48#
49# We can also do:
50# var y = @[x]
51# write -- @y
52
53var x = [1, 2, 3]
54
55var y = @[x] ++ ['99']
56
57#= y
58
59# note: related bug in parsing [[ in test/ysh-parse-errors.sh
60#assert [['1', '2', '3'] === y]
61
62assert [ ['1', '2', '3', '99'] === y]
63
64pp test_ (y)
65
66pp test_ (@[[4, 5, 6]])
67
68var bad = [42, []]
69pp test_ (@[ bad ]) # cannot be stringified
70
71## status: 3
72## STDOUT:
73(List) ["1","2","3","99"]
74(List) ["4","5","6"]
75## END
76
77
78#### $[expr_sub] in expression mode
79
80# Test that $[...] works in expression mode, not just in command/word mode
81
82# Basic integer expression
83var a = $[42]
84pp test_ (a)
85
86# Arithmetic expression
87var b = $[1 + 2]
88pp test_ (b)
89
90# Function call
91var arr = [1, 2, 3]
92var c = $[len(arr)]
93pp test_ (c)
94
95# Nested expression
96var d = $[$[5] + $[10]]
97echo "d = $d"
98
99# Combined with @[] splice
100var items = [10, 20, 30]
101var e = @[items]
102echo "len(e) = $[len(e)]"
103
104# Error case: list cannot be stringified
105var x = $[ [42] ]
106
107## status: 3
108## STDOUT:
109(Str) "42"
110(Str) "3"
111(Str) "3"
112d = 15
113len(e) = 3
114## END