3 line
='........................................'
5 "REQUIRE_SEARCH_PATH": [
7 "./root/usr/share/ucode/*.uc",
8 "/usr/local/lib/ucode/*.so",
17 local tag line outfile
19 while IFS
= read -r line
; do
24 outfile
=$
(printf "%s/%03d.in" "$dir" $count)
25 printf "" > "$outfile"
30 outfile
=$
(printf "%s/%03d.env" "$dir" $count)
31 printf "" > "$outfile"
33 "-- Expect stdout --"|
"-- Expect stderr --"|
"-- Expect exitcode --")
34 tag
="${line#-- Expect }"
37 outfile
=$
(printf "%s/%03d.%s" "$dir" $count "$tag")
38 printf "" > "$outfile"
42 outfile
="${line#-- File }"
43 outfile
="$(echo "${outfile% --}" | xargs)"
44 outfile
="$dir/files$(readlink -m "/${outfile:-file}")"
45 mkdir
-p "$(dirname "$outfile")"
46 printf "" > "$outfile"
53 if [ -n "$tag" ]; then
54 printf "%s\\n" "$line" >> "$outfile"
60 return $
(ls -l "$dir/"*.
in 2>/dev
/null |
wc -l)
73 ucode
-m mocklib
-m fw4
${uenv:+-e "$uenv"} -e '{
78 }' ${env:+-e "$(cat "$env")"} -i - <"$in" >"$dir/res.out" 2>"$dir/res.err"
80 printf "%d\n" $?
> "$dir/res.code"
84 if ! cmp -s "$dir/res.err" "${err:-$dir/empty}"; then
85 [ $fail = 0 ] && printf "!\n"
86 printf "Testcase #%d: Expected stderr did not match:\n" $num
87 diff -u --color=always
--label="Expected stderr" --label="Resulting stderr" "${err:-$dir/empty}" "$dir/res.err"
92 if ! cmp -s "$dir/res.out" "${out:-$dir/empty}"; then
93 [ $fail = 0 ] && printf "!\n"
94 printf "Testcase #%d: Expected stdout did not match:\n" $num
95 diff -u --color=always
--label="Expected stdout" --label="Resulting stdout" "${out:-$dir/empty}" "$dir/res.out"
100 if [ -n "$code" ] && ! cmp -s "$dir/res.code" "$code"; then
101 [ $fail = 0 ] && printf "!\n"
102 printf "Testcase #%d: Expected exit code did not match:\n" $num
103 diff -u --color=always
--label="Expected code" --label="Resulting code" "$code" "$dir/res.code"
113 local name
=${file##*/}
114 local res ecode eout eerr ein eenv tests
115 local testcase_first
=0 failed
=0 count
=0
117 printf "%s %s " "$name" "${line:${#name}}"
121 extract_sections
"$file" "/tmp/test.$$"
124 [ -f "/tmp/test.$$/001.in" ] && testcase_first
=1
126 for res
in "/tmp/test.$$/"[0-9]*; do
131 if [ $testcase_first = 1 ]; then
132 # Flush previous test
133 if [ -n "$ein" ]; then
134 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
144 run_testcase
$count "/tmp/test.$$" "$res" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
154 *.stdout
) eout
=$res ;;
155 *.stderr
) eerr
=$res ;;
156 *.exitcode
) ecode
=$res ;;
161 if [ $testcase_first = 1 ] && [ -n "$eout$eerr$ecode" ]; then
162 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
167 if [ $failed = 0 ]; then
170 printf "%s %s FAILED (%d/%d)\n" "$name" "${line:${#name}}" $failed $tests
183 local input
="$(readlink -f "$1")"
186 [ -f "$input" ] ||
return 1
187 [ -n "$select_tests" ] ||
return 0
189 for test in "$select_tests"; do
190 test="$(readlink -f "$test")"
192 [ "$test" != "$input" ] ||
return 0
198 for catdir
in tests
/[0-9][0-9]_
*; do
199 [ -d "$catdir" ] ||
continue
201 printf "\n##\n## Running %s tests\n##\n\n" "${catdir##*/[0-9][0-9]_}"
203 for testfile
in "$catdir/"[0-9][0-9]_
*; do
204 use_test
"$testfile" ||
continue
206 n_tests
=$
((n_tests
+ 1))
207 run_test
"$testfile" || n_fails
=$
((n_fails
+ 1))
211 printf "\nRan %d tests, %d okay, %d failures\n" $n_tests $
((n_tests
- n_fails
)) $n_fails