OILS / test / ysh-every-string.sh View on Github | oils.pub

183 lines, 42 significant
1#!/usr/bin/env bash
2#
3# Use every kind of YSH string
4#
5# Usage:
6# test/ysh-every-string.sh <function name>
7
8set -o nounset
9set -o pipefail
10set -o errexit
11
12OSH=${OSH:-bin/osh}
13YSH=${YSH:-bin/ysh}
14
15source test/common.sh # run-test-funcs
16
17# OSH and YSH
18test-legacy-osh-ysh() {
19 for sh in $OSH $YSH; do
20 log " test-legacy with $sh"
21
22 $sh <<'EOF'
23 echo 'foo \ "
24---'
25
26 echo "foo \\ \" '
27---"
28
29EOF
30 done
31}
32
33test-legacy-expr() {
34 for sh in $YSH; do
35 $sh <<'EOF'
36 # can't have backslash without r, and can't have single quote
37 var x = 'foo "
38---'
39 echo $x
40
41 var x = "foo \\ \" '
42---"
43 echo $x
44
45EOF
46done
47}
48
49test-legacy-multiline() {
50 ### double-quoted is allowed to be multi-line in YSH
51
52 for sh in $YSH; do
53 $sh <<'EOF'
54 echo """
55 foo \\ \" '
56 ---
57 """
58
59 var x = """
60 foo \\ \" '
61 ---
62 """
63 echo $x
64EOF
65done
66}
67
68test-raw() {
69 ### r prefix for raw is allowed in YSH
70
71 #for sh in $OSH $YSH; do
72 for sh in $YSH; do
73 $sh <<'EOF'
74 # Command mode
75
76 echo 'foo
77---'
78
79 echo r'foo
80---'
81
82 echo '''
83 foo
84 ---
85 '''
86
87 echo r'''
88 foo
89 ---
90 '''
91
92 # Expression mode
93
94 var x = 'foo
95---'
96 echo $x
97
98 var x = r'foo
99---'
100 echo $x
101
102 var x = '''
103 foo
104 ---
105 '''
106 echo $x
107
108 var x = r'''
109 foo
110 ---
111 '''
112 echo $x
113
114EOF
115 done
116}
117
118test-j8() {
119 ### J8 strings are allowed in YSH
120
121 #for sh in $OSH $YSH; do
122 for sh in $YSH; do
123 $sh <<'EOF'
124
125 # Command mode
126
127 echo u'fo\u{6f} \\ " \'
128---'
129
130 echo b'f\u{6f}\y6f \\ " \'
131---'
132
133 # Leading indent of ---
134 echo u'''
135 fo\u{6f} \\ " \'
136 ---
137 '''
138
139 echo b'''
140 f\u{6f}\y6f \\ " \'
141 ---
142 '''
143
144 # Expression mode
145
146 var x = u'fo\u{6f} \\ " \'
147---'
148 echo $x
149
150 var x = b'f\u{6f}\y6f \\ " \'
151---'
152 echo $x
153
154 var x = u'''
155 fo\u{6f} \\ " \'
156 ---
157 '''
158 echo $x
159
160 var x = b'''
161 f\u{6f}\y6f \\ " \'
162 ---
163 '''
164 echo $x
165
166EOF
167 done
168}
169
170soil-run-py() {
171 run-test-funcs
172}
173
174soil-run-cpp() {
175 ninja _bin/cxx-asan/osh
176 SH=_bin/cxx-asan/osh run-test-funcs
177}
178
179run-for-release() {
180 run-other-suite-for-release ysh-every-string run-test-funcs
181}
182
183"$@"