#!/bin/bash set -e if [ "$1" == "-v" -o "$1" == "--verbose" ]; then shift set -x export V=--verbose export V_SH=-x fi TESTDIR=$(dirname $0) TESTDIR_ABS=$(cd $TESTDIR && pwd) export COMMIT_PATCH="$TESTDIR_ABS/../commit-patch $V" VCSes=$((cd "$TESTDIR/vcs" && ls -1 *.sh) | sed -e 's/\(.*\)\.sh/\1/') Tests=$(cd "$TESTDIR" && ls -1 *.test) usage () { set +x echo "Usage:" echo " $0 [-v|--verbose] " echo "" echo " Where is one of: $(echo $VCSes)" exit 1; } VCs=${1:-$VCSes} [ "$VCs" == "--help" -o "$VCs" == "-h" ] && usage for vc in "$TESTDIR/vcs/"*.sh; do source "$vc" done run_test () { export VC=$1 TEST=$2 [ -d "$TESTDIR/tmp" ] || mkdir "$TESTDIR/tmp" WD=$(mktemp -d "$TESTDIR_ABS/tmp/wd.XXXXXXX") REPO=$(mktemp -d "$TESTDIR_ABS/tmp/repo.XXXXXXX") ${VC}_init "$WD" "$REPO" if ! (cd "$WD" && sh $V_SH -e "$TESTDIR_ABS/$TEST"); then echo "$VC / $TEST: Test failed." exit 1; fi ${VC}_cleanup "$WD" "$REPO" rm -rf "$WD" rm -rf "$REPO" } for vc in $VCs; do for t in $Tests; do run_test $vc $t done done echo "All tests appear to pass."