2 JSON_SCRIPT_BIN=./json_script-example
3 FILE_STDOUT=tests.stdout
4 FILE_STDERR=tests.stderr
5 FILE_EXPECTED=tests.expected
8 #export LD_PRELOAD=../libjson_script.so
9 $JSON_SCRIPT_BIN "$@" "$JSON_SCRIPT" >"$FILE_STDOUT" 2>"$FILE_STDERR"
16 echo "$expected" >"$FILE_EXPECTED"
17 if [ -z "$expected" ]; then
18 # we are expecting empty output, but we deliberately added a newline
19 # with echo above, so adding another echo to compensate for that
22 diff -up "$FILE_EXPECTED" "$file_stdio" >/dev/null 2>&1 || {
34 assertStdoutEquals() {
35 assertStdioEquals "$1" "$FILE_STDOUT"
38 assertStderrEquals() {
39 assertStdioEquals "$1" "$FILE_STDERR"
43 cat >"$JSON_SCRIPT" <<-EOF
50 assertStderrEquals "load JSON data from $JSON_SCRIPT failed."
54 cat >"$JSON_SCRIPT" <<-EOF
57 [ "eq", "VAR", "foo" ],
63 call_json_script "VAR=foo"
64 assertStdoutEquals "echo bar"
65 call_json_script "VAR=xxx"
66 assertStdoutEquals "echo baz"
70 cat >"$JSON_SCRIPT" <<-EOF
79 call_json_script "VAR=foo"
80 assertStdoutEquals "echo bar"
82 assertStdoutEquals "echo baz"
85 test_expr_regex_single() {
86 cat >"$JSON_SCRIPT" <<-EOF
89 [ "regex", "VAR", ".ell." ],
95 call_json_script "VAR=hello"
96 assertStdoutEquals "echo bar"
97 call_json_script "VAR=.ell."
98 assertStdoutEquals "echo bar"
100 assertStdoutEquals "echo baz"
101 call_json_script "VAR="
102 assertStdoutEquals "echo baz"
103 call_json_script "VAR=hell"
104 assertStdoutEquals "echo baz"
107 test_expr_regex_multi() {
108 cat >"$JSON_SCRIPT" <<-EOF
111 [ "regex", "VAR", [ ".ell.", "w.rld" ] ],
117 call_json_script "VAR=hello"
118 assertStdoutEquals "echo bar"
119 call_json_script "VAR=world"
120 assertStdoutEquals "echo bar"
121 call_json_script "VAR=.ell."
122 assertStdoutEquals "echo bar"
123 call_json_script "VAR=w.rld"
124 assertStdoutEquals "echo bar"
126 assertStdoutEquals "echo baz"
127 call_json_script "VAR="
128 assertStdoutEquals "echo baz"
129 call_json_script "VAR=hell"
130 assertStdoutEquals "echo baz"
134 cat >"$JSON_SCRIPT" <<-EOF
137 [ "not", [ "has", "VAR" ] ],
143 call_json_script "VAR=foo"
144 assertStdoutEquals "echo baz"
146 assertStdoutEquals "echo bar"
150 cat >"$JSON_SCRIPT" <<-EOF
153 [ "and", [ "eq", "EQVAR", "eqval" ],
154 [ "regex", "REGEXVAR", "regex..." ]
161 call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
162 assertStdoutEquals "echo bar"
163 call_json_script "EQVAR=foo"
164 assertStdoutEquals "echo baz"
165 call_json_script "REGEXVAR=regex***"
166 assertStdoutEquals "echo baz"
168 assertStdoutEquals "echo baz"
172 cat >"$JSON_SCRIPT" <<-EOF
175 [ "or", [ "not", [ "eq", "EQVAR", "eqval" ] ],
176 [ "regex", "REGEXVAR", [ "regexva.[0-9]", "regexva.[a-z]" ] ]
183 call_json_script "EQVAR=eqval" "REGEXVAR=regexval1"
184 assertStdoutEquals "echo bar"
185 call_json_script "EQVAR=neq" "REGEXVAR=sxc"
186 assertStdoutEquals "echo bar"
187 call_json_script "REGEXVAR=sxc"
188 assertStdoutEquals "echo bar"
189 call_json_script "EQVAR=foo"
190 assertStdoutEquals "echo bar"
192 assertStdoutEquals "echo bar"
193 call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
194 assertStdoutEquals "echo baz"
198 cat >"$JSON_SCRIPT" <<-EOF
201 [ "isdir", "%VAR%" ],
207 call_json_script "VAR=/"
208 assertStdoutEquals "echo bar"
209 call_json_script "VAR=$(mktemp -u)"
210 assertStdoutEquals "echo baz"
212 assertStdoutEquals "echo baz"
216 cat >"$JSON_SCRIPT" <<-EOF
218 [ "case", "CASEVAR", {
219 "0": [ "echo", "foo" ],
224 "%VAR%": [ "echo", "quz" ]
228 call_json_script "CASEVAR=0"
229 assertStdoutEquals "echo foo"
230 call_json_script "CASEVAR=1"
231 assertStdoutEquals "echo bar
233 call_json_script "CASEVAR=%VAR%"
234 assertStdoutEquals "echo quz"
235 call_json_script "CASEVAR="
236 assertStdoutEquals ""
238 assertStdoutEquals ""
239 call_json_script "CASEVAR=xxx" "VAR=xxx"
240 assertStdoutEquals ""
244 cat >"$JSON_SCRIPT" <<-EOF
247 [ "eq", "VAR", "foo" ],
253 call_json_script "VAR=foo"
254 assertStdoutEquals "echo bar"
255 call_json_script "VAR=xxx"
256 assertStdoutEquals "echo baz"
260 cat >"$JSON_SCRIPT" <<-EOF
262 [ "exec", "%VAR%", "/%VAS%%%/" ]
266 assertStdoutEquals "exec /%/"
267 call_json_script "VAR="
268 assertStdoutEquals "exec /%/"
269 call_json_script "VAR=qux" "VAS=3"
270 assertStdoutEquals "exec qux /3%/"
274 cat >"$JSON_SCRIPT" <<-EOF
276 [ "heh", "%HEHVAR%" ],
277 [ "%VAR%", "%VAR%" ],
279 [ "exec_non_reachable", "Arghhh" ]
282 call_json_script "HEHVAR=dude" "VAR=ow"
283 assertStdoutEquals "heh dude