summaryrefslogtreecommitdiff
path: root/tests/test_category.sh
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2012-07-24 15:31:14 +0900
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2012-07-24 16:55:55 +0900
commit05307c038028cad71059f48b2b852d663cbd03ed (patch)
treeb500a626943a0a21c9b4977e1a4bff0823ea2b50 /tests/test_category.sh
parentf48eed76cc12f9e802afe5a150d4b8f7f9a13ec6 (diff)
downloadpygerrit-05307c038028cad71059f48b2b852d663cbd03ed.tar.gz
Add Makefile and script for unit tests
Change-Id: Ib12d9c22c507dff58fabfc6cf80092bc3fd60e3d
Diffstat (limited to 'tests/test_category.sh')
-rwxr-xr-xtests/test_category.sh73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/test_category.sh b/tests/test_category.sh
new file mode 100755
index 0000000..8f8b982
--- /dev/null
+++ b/tests/test_category.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+ERROUTPUT=`mktemp`
+TESTOUTPUT=`mktemp`
+
+cleanup()
+{
+ rm -f $ERROUTPUT 2> /dev/null
+ rm -f $TESTOUTPUT 2> /dev/null
+ return 0
+}
+
+fatal()
+{
+ echo '***' "$@" >&2
+ cleanup
+ exit 1
+}
+
+CATEGORY=$1
+ROOTDIR=$2
+TESTS=`ls $CATEGORY/*/command 2> /dev/null | sed 's|/command||; s|.*/||' | sort`
+
+if [ -z "$CATEGORY" ] ; then
+ fatal No test directory specified.
+fi
+if [ -z "$ROOTDIR" -o ! -d "$ROOTDIR" ] ; then
+ fatal No valid test root directory specified.
+fi
+
+echo Running tests for $CATEGORY
+for TEST in $TESTS ; do
+ echo " $TEST"
+ export TESTDIR=`pwd`/$CATEGORY/$TEST
+
+ if [ -f $TESTDIR/input -a -f $TESTDIR/output ] ; then
+ ( cd $ROOTDIR && sh $TESTDIR/command ) \
+ < $TESTDIR/input 2> $ERROUTPUT > $TESTOUTPUT
+ EXITSTATUS=$?
+ elif [ -f $TESTDIR/input ] ; then
+ ( cd $ROOTDIR && sh $TESTDIR/command ) \
+ < $TESTDIR/input 2> $ERROUTPUT > /dev/null
+ EXITSTATUS=$?
+ elif [ -f $TESTDIR/output ] ; then
+ ( cd $ROOTDIR && sh $TESTDIR/command ) 2> $ERROUTPUT > $TESTOUTPUT
+ EXITSTATUS=$?
+ elif [ -f $TESTDIR/status ] ; then
+ ( cd $ROOTDIR && sh $TESTDIR/command ) 2> $ERROUTPUT > /dev/null
+ EXITSTATUS=$?
+ fi
+
+ if [ ! -f $TESTDIR/status -a ! -f $TESTDIR/output ] ; then
+ fatal "Bad test case; no expected output or exit status provided."
+ fi
+
+ if [ -f $TESTDIR/status ] ; then
+ EXPECTED_STATUS=`cat $TESTDIR/status`
+ if [ "$EXITSTATUS" != "$EXPECTED_STATUS" ] ; then
+ cat $ERROUTPUT >&2
+ fatal "Bad exit status; expected $EXPECTED_STATUS, got $EXITSTATUS."
+ fi
+ fi
+
+ if [ -f $TESTDIR/output ] ; then
+ if ! cmp -s $TESTDIR/output $TESTOUTPUT ; then
+ diff -u $TESTDIR/output $TESTOUTPUT | \
+ sed -e '1s/--- [^ ][^ ]*/--- expected-output/' \
+ -e '2s/+++ [^ ][^ ]*/+++ actual-output/'
+ fatal "Unexpected command output (see diff above)."
+ fi
+ fi
+done
+cleanup