3 line
='........................................'
4 uenv
='{ "REQUIRE_SEARCH_PATH": [ "/usr/local/lib/ucode/*.so", "/usr/lib/ucode/*.so", "./tests/*.uc", "./root/usr/share/ucode/*.uc" ] }'
10 local tag line outfile
12 while IFS
= read -r line
; do
17 outfile
=$
(printf "%s/%03d.in" "$dir" $count)
18 printf "" > "$outfile"
23 outfile
=$
(printf "%s/%03d.env" "$dir" $count)
24 printf "" > "$outfile"
26 "-- Expect stdout --"|
"-- Expect stderr --"|
"-- Expect exitcode --")
27 tag
="${line#-- Expect }"
30 outfile
=$
(printf "%s/%03d.%s" "$dir" $count "$tag")
31 printf "" > "$outfile"
38 if [ -n "$tag" ]; then
39 printf "%s\\n" "$line" >> "$outfile"
45 return $
(ls -l "$dir/"*.
in 2>/dev
/null |
wc -l)
58 ucode
${uenv:+-e "$uenv"} ${env:+-e "$(cat "$env")"} -i - <"$in" >"$dir/res.out" 2>"$dir/res.err"
60 printf "%d\n" $?
> "$dir/res.code"
64 if ! cmp -s "$dir/res.err" "${err:-$dir/empty}"; then
65 [ $fail = 0 ] && printf "!\n"
66 printf "Testcase #%d: Expected stderr did not match:\n" $num
67 diff -u --color=always
--label="Expected stderr" --label="Resulting stderr" "${err:-$dir/empty}" "$dir/res.err"
72 if ! cmp -s "$dir/res.out" "${out:-$dir/empty}"; then
73 [ $fail = 0 ] && printf "!\n"
74 printf "Testcase #%d: Expected stdout did not match:\n" $num
75 diff -u --color=always
--label="Expected stdout" --label="Resulting stdout" "${out:-$dir/empty}" "$dir/res.out"
80 if [ -n "$code" ] && ! cmp -s "$dir/res.code" "$code"; then
81 [ $fail = 0 ] && printf "!\n"
82 printf "Testcase #%d: Expected exit code did not match:\n" $num
83 diff -u --color=always
--label="Expected code" --label="Resulting code" "$code" "$dir/res.code"
93 local name
=${file##*/}
94 local res ecode eout eerr ein eenv tests
95 local testcase_first
=0 failed
=0 count
=0
97 printf "%s %s " "$name" "${line:${#name}}"
101 extract_sections
"$file" "/tmp/test.$$"
104 [ -f "/tmp/test.$$/001.in" ] && testcase_first
=1
106 for res
in "/tmp/test.$$/"[0-9]*; do
111 if [ $testcase_first = 1 ]; then
112 # Flush previous test
113 if [ -n "$ein" ]; then
114 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
124 run_testcase
$count "/tmp/test.$$" "$res" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
134 *.stdout
) eout
=$res ;;
135 *.stderr
) eerr
=$res ;;
136 *.exitcode
) ecode
=$res ;;
141 if [ $testcase_first = 1 ] && [ -n "$eout$eerr$ecode" ]; then
142 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
147 if [ $failed = 0 ]; then
150 printf "%s %s FAILED (%d/%d)\n" "$name" "${line:${#name}}" $failed $tests
160 for catdir
in tests
/[0-9][0-9]_
*; do
161 [ -d "$catdir" ] ||
continue
163 printf "\n##\n## Running %s tests\n##\n\n" "${catdir##*/[0-9][0-9]_}"
165 for testfile
in "$catdir/"[0-9][0-9]_
*; do
166 [ -f "$testfile" ] ||
continue
168 n_tests
=$
((n_tests
+ 1))
169 run_test
"$testfile" || n_fails
=$
((n_fails
+ 1))
173 printf "\nRan %d tests, %d okay, %d failures\n" $n_tests $
((n_tests
- n_fails
)) $n_fails