#!/bin/bash
+function absdirname() {
+ pushd $(dirname $0) >> /dev/null
+ pwd
+ popd >> /dev/null
+}
+
+BINDIR=$(absdirname "$0")
PHP=${PHP:-php}
PHPUNIT=${PHPUNIT:-phpunit}
MODE=standalone
+XMLDIR=
+JSONDIR=
-if [ "$1" == "--civi" ]; then
- MODE=civi
+while [ -n "$1" ]; do
+ ARG="$1"
shift
-fi
-TESTSUITE="$1"
-shift
+ case "$ARG" in
+ --civi)
+ MODE=civi
+ ;;
+ --civibuild-restore)
+ CIVIBUILD_RESTORE="$1"
+ shift
+ ;;
+ --test-dir)
+ TESTSUITE="$1"
+ shift
+ ;;
+ --json-dir)
+ JSONDIR="$1"
+ [ ! -d "$JSONDIR" ] && mkdir -p "$JSONDIR"
+ shift
+ ;;
+ --xml-dir)
+ XMLDIR="$1"
+ [ ! -d "$XMLDIR" ] && mkdir -p "$XMLDIR"
+ shift
+ ;;
+ *)
+ echo "unrecognized option: $ARG"
+ ;;
+ esac
+done
-OUTDIR="$1"
-shift
-if [ -z "$TESTSUITE" -o -z "$OUTDIR" ]; then
+if [ -z "$TESTSUITE" ]; then
echo "summary: Executes all tests in a suite (individually)"
- echo "usage: $0 <test-suite-path> <output-dir>"
+ echo "usage: $0 --test-dir <dir> [--json-dir <dir>] [--xml-dir <dir>] [--civi] [--civibuild-restore <build-name>]"
exit 1
fi
-[ ! -d "$OUTDIR" ] && mkdir -p "$OUTDIR"
#phpunit-ls "$TESTSUITE"
-phpunit-ls "$TESTSUITE" | while read FILE CLASS METHOD ; do
+$BINDIR/phpunit-ls "$TESTSUITE" | while read FILE CLASS METHOD ; do
+ ## Optionally reset DBs
+ if [ -n "$CIVIBUILD_RESTORE" ]; then
+ civibuild restore "$CIVIBUILD_RESTORE"
+ fi
+
+ ## Prepare test command
+ PHPUNITARGS="--tap"
+ if [ -n "$JSONDIR" ]; then
+ PHPUNITARGS="$PHPUNITARGS --log-json $JSONDIR/$CLASS-$METHOD.json"
+ fi
+ if [ -n "$XMLDIR" ]; then
+ PHPUNITARGS="$PHPUNITARGS --log-junit $XMLDIR/$CLASS-$METHOD.xml"
+ fi
+
+ ## Run the test!
if [ "$MODE" == "civi" ]; then
- $PHP ./scripts/phpunit --tap --log-json "$OUTDIR/$CLASS-$METHOD.json" --filter $METHOD'( with.*)?$' "$CLASS"
+ $PHP ./scripts/phpunit $PHPUNITARGS --filter $METHOD'( with.*)?$' "$CLASS"
fi
if [ "$MODE" == "standalone" ]; then
- $PHP $(which $PHPUNIT) --tap --log-json "$OUTDIR/$CLASS-$METHOD.json" --filter $METHOD'( with.*)?$' "$FILE"
+ $PHP $(which $PHPUNIT) $PHPUNITARGS --filter $METHOD'( with.*)?$' "$FILE"
fi
done