| #!/usr/bin/env bash |
| |
| print_help() { |
| echo "$1 [-a] [-d] [TEST]..." |
| } |
| |
| run_test() { |
| local result name=$1 |
| |
| if [ $destructive -ne 1 ] && [[ "$name" == 1[0-9][0-9]-* ]]; then |
| echo "SKIP (destructive test)" |
| return 9 |
| fi |
| |
| ./$name |
| result=$? |
| |
| if [ $result -ne 0 -a $result -ne 9 ]; then |
| if [ $abort_on_fail -ne 0 ]; then |
| exit 1 |
| fi |
| fi |
| |
| return $result |
| } |
| |
| passed=() failed=() skipped=() |
| |
| abort_on_fail=0 |
| destructive=0 |
| |
| while getopts ":ad" opt; do |
| case $opt in |
| a) abort_on_fail=1;; |
| d) destructive=1;; |
| *) print_help "$0"; exit 3;; |
| esac |
| done |
| |
| shift $[$OPTIND - 1] |
| |
| [ $# -gt 0 ] && tests=($@) || tests=([0-9]*-*[^_]) |
| |
| for test in "${tests[@]}"; do |
| printf "%s " "$test" |
| run_test $test |
| result=$? |
| echo |
| |
| case $result in |
| 0) passed=(${passed[@]} $test);; |
| 9) skipped=(${skipped[@]} $test);; |
| *) failed=(${failed[@]} $test);; |
| esac |
| done |
| |
| echo |
| echo "SUMMARY:" |
| echo " TOTAL $[${#passed[@]} + ${#failed[@]} + ${#skipped[@]}]" |
| echo " PASSED ${#passed[@]}" |
| echo " FAILED ${#failed[@]} (${failed[@]})" |
| echo " SKIPPED ${#skipped[@]} (${skipped[@]})" |
| |
| [ ${#failed[@]} -eq 0 ] |