notmuch/test/aggregate-results.sh
Tomi Ollila 11a3805464 test: exit with nonzero value when not all tests completed successfully
If any of the tests in our test system is not passing the execution
of the test suite completes with nonzero exit value.

It is better to rely on the exit value of the test system instead
of some arbitrary strings in test output (or use both).
2013-09-08 22:40:57 -03:00

90 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -eu
fixed=0
success=0
failed=0
broken=0
total=0
for file
do
while read type value
do
case $type in
'')
continue ;;
fixed)
fixed=$(($fixed + $value)) ;;
success)
success=$(($success + $value)) ;;
failed)
failed=$(($failed + $value)) ;;
broken)
broken=$(($broken + $value)) ;;
total)
total=$(($total + $value)) ;;
esac
done <"$file"
done
pluralize () {
case $2 in
1)
case $1 in
test)
echo test ;;
failure)
echo failure ;;
esac
;;
*)
case $1 in
test)
echo tests ;;
failure)
echo failures ;;
esac
;;
esac
}
echo "Notmuch test suite complete."
if [ "$fixed" = "0" ] && [ "$failed" = "0" ]; then
tests=$(pluralize "test" $total)
printf "All $total $tests "
if [ "$broken" = "0" ]; then
echo "passed."
else
failures=$(pluralize "failure" $broken)
echo "behaved as expected ($broken expected $failures)."
fi;
else
echo "$success/$total tests passed."
if [ "$broken" != "0" ]; then
tests=$(pluralize "test" $broken)
echo "$broken broken $tests failed as expected."
fi
if [ "$fixed" != "0" ]; then
tests=$(pluralize "test" $fixed)
echo "$fixed broken $tests now fixed."
fi
if [ "$failed" != "0" ]; then
tests=$(pluralize "test" $failed)
echo "$failed $tests failed."
fi
fi
skipped=$(($total - $fixed - $success - $failed - $broken))
if [ "$skipped" != "0" ]; then
tests=$(pluralize "test" $skipped)
echo "$skipped $tests skipped."
fi
if [ $success -gt 0 -a $fixed -eq 0 -a $failed -eq 0 -a $skipped -eq 0 ]
then
exit 0
else
exit 1
fi