| #!/bin/sh |
| |
| # Copyright 2015 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. |
| # |
| |
| PROGDIR=$(dirname "$0") |
| |
| TOPDIR=$(cd $PROGDIR/../.. && pwd -P) |
| |
| # Remove leading ./ if applicable. |
| PROGDIR=${PROGDIR#./} |
| |
| # Assume we are under .../android/scripts/tests/gen-entries/ |
| # and look for .../android/scripts/utils/common.shi |
| |
| _SHU_PROGDIR=$TOPDIR/utils |
| . $_SHU_PROGDIR/common.shi |
| |
| shell_import option_parser.shi |
| |
| PROGRAM_PARAMETERS= |
| |
| PROGRAM_DESCRIPTION=\ |
| "Run the test suite for the gen-entries.py script. This looks for |
| files named t.<number>/<name>.entries, and uses them as input to |
| 'gen-entries.py'. It then compares the output to t.<number>/<name>.<mode> ." |
| |
| OPT_SCRIPT=$TOPDIR/gen-entries.py |
| option_register_var "--script=<script>" OPT_SCRIPT "Specify alternate gen-entries.py script." "$SCRIPT" |
| |
| OPT_OUT_DIR= |
| option_register_var "--out-dir=<dir>" OPT_OUT_DIR "Generate outputs into <dir>" |
| |
| OPT_TOOL= |
| option_register_var "--tool=<tool>" OPT_TOOL "Launch visual diff tool in case of differences." |
| |
| option_parse "$@" |
| |
| # Check gen-entries.py script. |
| if [ ! -f "$OPT_SCRIPT" ]; then |
| panic "Cannot find script: $OPT_SCRIPT" |
| fi |
| |
| # Create output directory. |
| OUT_DIR= |
| if [ "$OPT_OUT_DIR" ]; then |
| OUT_DIR=$OPT_OUT_DIR |
| else |
| OUT_DIR=/tmp/emulator-gen-entries-testing |
| echo "Auto-config: --out-dir=$OUT_DIR" |
| fi |
| mkdir -p "$OUT_DIR" && rm -rf "$OUT_DIR/gen-entries" |
| |
| OUT_DIR=$OUT_DIR/gen-entries |
| |
| MODES="def sym wrapper symbols _symbols functions funcargs" |
| |
| # Find test directories |
| TEST_DIRS=$(cd "$PROGDIR" && find . -name "t.*" | sed -e 's|^\./||') |
| for TEST_DIR in $TEST_DIRS; do |
| IN=$PROGDIR/$TEST_DIR |
| NAMES=$(cd $IN && find . -name "*.entries" | sed -e 's|^\./||g' -e 's|\.entries$||g') |
| OUT=$OUT_DIR/$TEST_DIR |
| mkdir -p "$OUT" |
| for NAME in $NAMES; do |
| echo "Processing $TEST_DIR/$NAME.entries" |
| run cp -f "$IN/$NAME.entries" "$OUT/$NAME.entries" |
| for MODE in $MODES; do |
| run $OPT_SCRIPT --mode=$MODE "$IN/$NAME.entries" --output=$OUT/$NAME.$MODE |
| done |
| done |
| if ! diff -qr "$IN" "$OUT"; then |
| if [ "$OPT_TOOL" ]; then |
| $OPT_TOOL "$IN" "$OUT" |
| else |
| echo "ERROR: Invalid differences between actual and expected output!" |
| diff -burN "$IN" "$OUT" |
| exit 1 |
| fi |
| fi |
| done |
| |
| echo "All good!" |
| exit 0 |