#!/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 ]