1#!/bin/bash -vx
2set -euo pipefail
3
4# testwrapper.sh: run a flex test, typically called by a Makefile
5
6# Each test will exercise some feature or aspect of flex. Run the test with any input it may need.
7
8INPUT_DIRECTORY=""
9INPUT_NAME=""
10INPUT_COUNT=0
11USE_REDIRECT=0
12DO_COMPARISON=0
13
14while getopts :d:i:rt1 OPTION ; do
15    case $OPTION in
16        d) INPUT_DIRECTORY=$OPTARG ;;
17        i)
18            if [ "$INPUT_NAME" == "" ] ; then
19                INPUT_NAME="$OPTARG"
20            else
21                INPUT_NAME="$INPUT_NAME $OPTARG"
22            fi
23            INPUT_COUNT=$(($INPUT_COUNT+1))
24            ;;
25        r) USE_REDIRECT=1 ;;
26        t) USE_TABLES=1 ;;
27        1) DO_COMPARISON=1 ;;
28    esac
29    done
30
31TESTNAME="${!OPTIND}"
32
33INPUT_NAME=${INPUT_NAME:-`basename $TESTNAME`.txt}
34
35if [ "$DO_COMPARISON" -eq "1" ] ; then
36    test `$TESTNAME 1 < $INPUT_DIRECTORY/$INPUT_NAME` -eq `$TESTNAME < $INPUT_DIRECTORY/$INPUT_NAME`
37    exit $?
38    fi
39
40if [ $INPUT_COUNT -gt 1 ] ; then
41    $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} ${INPUT_NAME}
42    exit $?
43    fi
44
45if [ -f ${INPUT_DIRECTORY}/${INPUT_NAME} ] ; then
46    if [ $USE_REDIRECT == 1 ] ; then
47        $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} < $INPUT_DIRECTORY/$INPUT_NAME
48    else
49        $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME}.tables} $INPUT_DIRECTORY/$INPUT_NAME
50    fi
51else
52    $TESTNAME
53fi
54