3 line
='........................................'
4 ucode
='ucode -S -T, -L./tests/lib -L./root/usr/share/ucode'
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"
35 outfile
="${line#-- File }"
36 outfile
="$(echo "${outfile% --}" | xargs)"
37 outfile
="$dir/files$(readlink -m "/${outfile:-file}")"
38 mkdir
-p "$(dirname "$outfile")"
39 printf "" > "$outfile"
46 if [ -n "$tag" ]; then
47 printf "%s\\n" "$line" >> "$outfile"
53 return $
(ls -l "$dir/"*.
in 2>/dev
/null |
wc -l)
67 -D MOCK_SEARCH_PATH
='["'"$dir"'/files", "./tests/mocks"]' \
70 - <"$in" >"$dir/res.out" 2>"$dir/res.err"
72 printf "%d\n" $?
> "$dir/res.code"
76 if ! cmp -s "$dir/res.err" "${err:-$dir/empty}"; then
77 [ $fail = 0 ] && printf "!\n"
78 printf "Testcase #%d: Expected stderr did not match:\n" $num
79 diff -u --color=always
--label="Expected stderr" --label="Resulting stderr" "${err:-$dir/empty}" "$dir/res.err"
84 if ! cmp -s "$dir/res.out" "${out:-$dir/empty}"; then
85 [ $fail = 0 ] && printf "!\n"
86 printf "Testcase #%d: Expected stdout did not match:\n" $num
87 diff -u --color=always
--label="Expected stdout" --label="Resulting stdout" "${out:-$dir/empty}" "$dir/res.out"
92 if [ -n "$code" ] && ! cmp -s "$dir/res.code" "$code"; then
93 [ $fail = 0 ] && printf "!\n"
94 printf "Testcase #%d: Expected exit code did not match:\n" $num
95 diff -u --color=always
--label="Expected code" --label="Resulting code" "$code" "$dir/res.code"
105 local name
=${file##*/}
106 local res ecode eout eerr ein eenv tests
107 local testcase_first
=0 failed
=0 count
=0
109 printf "%s %s " "$name" "${line:${#name}}"
113 extract_sections
"$file" "/tmp/test.$$"
116 [ -f "/tmp/test.$$/001.in" ] && testcase_first
=1
118 for res
in "/tmp/test.$$/"[0-9]*; do
123 if [ $testcase_first = 1 ]; then
124 # Flush previous test
125 if [ -n "$ein" ]; then
126 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
136 run_testcase
$count "/tmp/test.$$" "$res" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
146 *.stdout
) eout
=$res ;;
147 *.stderr
) eerr
=$res ;;
148 *.exitcode
) ecode
=$res ;;
153 if [ $testcase_first = 1 ] && [ -n "$eout$eerr$ecode" ]; then
154 run_testcase
$count "/tmp/test.$$" "$ein" "$eenv" "$eout" "$eerr" "$ecode" || failed
=$
((failed
+ 1))
159 if [ $failed = 0 ]; then
162 printf "%s %s FAILED (%d/%d)\n" "$name" "${line:${#name}}" $failed $tests
175 local input
="$(readlink -f "$1")"
178 [ -f "$input" ] ||
return 1
179 [ -n "$select_tests" ] ||
return 0
181 for test in "$select_tests"; do
182 test="$(readlink -f "$test")"
184 [ "$test" != "$input" ] ||
return 0
190 for catdir
in tests
/[0-9][0-9]_
*; do
191 [ -d "$catdir" ] ||
continue
193 printf "\n##\n## Running %s tests\n##\n\n" "${catdir##*/[0-9][0-9]_}"
195 for testfile
in "$catdir/"[0-9][0-9]_
*; do
196 use_test
"$testfile" ||
continue
198 n_tests
=$
((n_tests
+ 1))
199 run_test
"$testfile" || n_fails
=$
((n_fails
+ 1))
203 printf "\nRan %d tests, %d okay, %d failures\n" $n_tests $
((n_tests
- n_fails
)) $n_fails