#! /bin/bash main() { local ret=0 for f in ./*_test.sh; do if ! one_main "$f"; then echo failed $f >&2 ret=$((ret+1)) fi done if [ $ret != 0 ]; then echo failed >&2 fi return $ret } one_main() ( echo testing $f >&2 local f="$1" local ret=0 for t in $(grep ^test_ "$f" | sed 's/(.*//'); do echo testing $f:$t >&2 each source "${f%_test.sh}.sh" source "$f" if ! eval "$t"; then echo failed $f:$t >&2 ret=$((ret+1)) fi done return $ret ) each() { export CACHE=$(mktemp -d) source ./cache.sh } if [ "$0" == "$BASH_SOURCE" ]; then main "$@" fi