#!/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=
while [ -n "$1" ]; do
ARG="$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
if [ -z "$TESTSUITE" ]; then
echo "summary: Executes all tests in a suite (individually)"
echo "usage: $0 --test-dir
[--json-dir ] [--xml-dir ] [--civi] [--civibuild-restore ]"
exit 1
fi
#phpunit-ls "$TESTSUITE"
$BINDIR/phpunit-ls "$TESTSUITE" | while read FILE CLASS METHOD ; do
if [ -z "$FILE" -o ! -f "$FILE" ]; then continue; fi
echo "[[Processing $FILE $CLASS::$METHOD]]"
## 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 $PHPUNITARGS --filter $METHOD'( with.*)?$' "$CLASS"
fi
if [ "$MODE" == "standalone" ]; then
$PHP $(which $PHPUNIT) $PHPUNITARGS --filter $METHOD'( with.*)?$' "$FILE"
fi
done