diff options
Diffstat (limited to 'tests/testwrapper.sh')
-rwxr-xr-x | tests/testwrapper.sh | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/testwrapper.sh b/tests/testwrapper.sh new file mode 100755 index 0000000..30127b5 --- /dev/null +++ b/tests/testwrapper.sh @@ -0,0 +1,53 @@ +#!/bin/bash -vx +set -euo pipefail + +# testwrapper.sh: run a flex test, typically called by a Makefile + +# Each test will exercise some feature or aspect of flex. Run the test with any input it may need. + +INPUT_DIRECTORY="" +INPUT_NAME="" +INPUT_COUNT=0 +USE_REDIRECT=0 +DO_COMPARISON=0 + +while getopts :d:i:rt1 OPTION ; do + case $OPTION in + d) INPUT_DIRECTORY=$OPTARG ;; + i) + if [ "$INPUT_NAME" == "" ] ; then + INPUT_NAME="$OPTARG" + else + INPUT_NAME="$INPUT_NAME $OPTARG" + fi + INPUT_COUNT=$(($INPUT_COUNT+1)) + ;; + r) USE_REDIRECT=1 ;; + t) USE_TABLES=1 ;; + 1) DO_COMPARISON=1 ;; + esac + done + +TESTNAME="${!OPTIND}" + +INPUT_NAME=${INPUT_NAME:-`basename $TESTNAME`.txt} + +if [ "$DO_COMPARISON" -eq "1" ] ; then + test `$TESTNAME 1 < $INPUT_DIRECTORY/$INPUT_NAME` -eq `$TESTNAME < $INPUT_DIRECTORY/$INPUT_NAME` + exit $? + fi + +if [ $INPUT_COUNT -gt 1 ] ; then + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} ${INPUT_NAME} + exit $? + fi + +if [ -f ${INPUT_DIRECTORY}/${INPUT_NAME} ] ; then + if [ $USE_REDIRECT == 1 ] ; then + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} < $INPUT_DIRECTORY/$INPUT_NAME + else + $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} $INPUT_DIRECTORY/$INPUT_NAME + fi +else + $TESTNAME +fi |