| #!/bin/sh |
| |
| # Copyright 2014 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| set -e |
| |
| export LANG=C |
| export LC_ALL=C |
| |
| PROGDIR=$(dirname "$0") |
| PROGNAME=$(basename "$0") |
| |
| fatal () { |
| echo "ERROR: $@" |
| exit 1 |
| } |
| |
| OPT_EMUGEN= |
| OPT_HELP= |
| OPT_OUT_DIR= |
| OPT_TOOL= |
| |
| for OPT; do |
| OPTARG=$(expr "x$OPT" : "x[^=]*=\\(.*\\)" || true) |
| case $OPT in |
| --help|-h|-?) |
| OPT_HELP=true |
| ;; |
| --emugen=*) |
| OPT_EMUGEN=$OPTARG |
| ;; |
| --out-dir=*) |
| OPT_OUT_DIR=$OPTARG |
| ;; |
| --tool=*) |
| OPT_TOOL=$OPTARG |
| ;; |
| -*) |
| fatal "Invalid option '$OPT', see --help." |
| ;; |
| *) |
| fatal "This script doesn't take arguments, see --help." |
| ;; |
| esac |
| done |
| |
| if [ "$OPT_HELP" ]; then |
| cat <<EOF |
| Usage: $PROGNAME [options] |
| |
| Run the emugen test suite. This scripts looks for sub-directories |
| named t.<number>/input, and uses them as input to 'emugen'. It then |
| compares the output to t.<number>/expected/ content. |
| |
| Valid options: |
| --help|-h|-? Print this help. |
| --out-dir=<dir> Generate outputs into <dir>. |
| --emugen=<program> Emugen program path, if not in path. |
| --tool=<tool> Launch visual diff tool in case of differences. |
| EOF |
| exit 0 |
| fi |
| |
| # Find emugen program |
| EMUGEN= |
| if [ "$OPT_EMUGEN" ]; then |
| EMUGEN=$OPT_EMUGEN |
| else |
| EMUGEN=$(which emugen 2>/dev/null || true) |
| if [ -z "$EMUGEN" ]; then |
| fatal "Cannot find 'emugen' program in PATH, use --emugen=<program> option." |
| fi |
| echo "Auto-config: --emugen=$EMUGEN" |
| fi |
| if [ ! -f "$EMUGEN" ]; then |
| fatal "Emugen program doesn't exist: $EMUGEN" |
| fi |
| |
| # Create output directory. |
| OUT_DIR= |
| if [ "$OPT_OUT_DIR" ]; then |
| OUT_DIR=$OPT_OUT_DIR |
| else |
| OUT_DIR=/tmp/$USER-emugen-testing |
| echo "Auto-config: --out-dir=$OUT_DIR" |
| fi |
| mkdir -p "$OUT_DIR" && rm -rf "$OUT_DIR/emugen" |
| |
| OUT_DIR=$OUT_DIR/emugen |
| |
| # Find test directories |
| TEST_DIRS=$(cd "$PROGDIR" && find . -name "t.*" | sed -e 's|^\./||') |
| for TEST_DIR in $TEST_DIRS; do |
| IN=$PROGDIR/$TEST_DIR/input |
| PREFIXES=$(cd $IN && find . -name "*.in" | sed -e 's|^\./||g' -e 's|\.in$||g') |
| OUT=$OUT_DIR/$TEST_DIR |
| mkdir -p "$OUT/encoder" |
| mkdir -p "$OUT/decoder" |
| mkdir -p "$OUT/wrapper" |
| for PREFIX in $PREFIXES; do |
| echo "Processing $IN/foo.*" |
| $EMUGEN -i "$PROGDIR/$TEST_DIR/input" -D "$OUT/decoder" -E "$OUT/encoder" -W "$OUT/wrapper" $PREFIX |
| done |
| if ! diff -qr "$PROGDIR/$TEST_DIR/expected" "$OUT"; then |
| if [ "$OPT_TOOL" ]; then |
| $OPT_TOOL "$PROGDIR/$TEST_DIR/expected" "$OUT" |
| else |
| echo "ERROR: Invalid differences between actual and expected output!" |
| diff -burN "$PROGDIR/$TEST_DIR/expected" "$OUT" |
| exit 1 |
| fi |
| fi |
| done |
| |
| echo "All good!" |
| exit 0 |