123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #! /bin/sh
- # Copyright (C) 2011-2017 Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2, or (at your option)
- # any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- #
- # Test driver for a very simple test protocol used by the Automake
- # testsuite to check support for custom test drivers allowing for more
- # test results per test script.
- #
- # The exit status of the wrapped script is ignored. Lines in its stdout
- # and stderr beginning with 'PASS', 'FAIL', 'XFAIL', 'XPASS', 'SKIP' or
- # 'ERROR' count as a test case result with the obviously-corresponding
- # outcome. Every other line is ignored for what concerns the testsuite
- # outcome.
- #
- # This script is used at least by the 'driver-custom-multitest*.test'
- # tests.
- #
- # Help to avoid typo-related bugs.
- set -u
- ## Option parsing.
- test_name=INVALID.NAME
- log_file=BAD.LOG
- trs_file=BAD.TRS
- while test $# -gt 0; do
- case $1 in
- --test-name) test_name=$2; shift;;
- --log-file) log_file=$2; shift;;
- --trs-file) trs_file=$2; shift;;
- # Ignored.
- --expect-failure) shift;;
- --color-tests) shift;;
- --enable-hard-errors) shift;;
- # Explicitly terminate option list.
- --) shift; break;;
- # Shouldn't happen
- *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
- esac
- shift
- done
- ## Log file header.
- {
- echo "RUN: $test_name"
- echo "RUN: $test_name" | sed 's/./=/g'
- echo
- } > $log_file
- ## Run the test script, get test cases results, display them on console.
- "$@" 2>&1 | tee -a $log_file | (
- i=0 st=0
- exec 5> $trs_file
- while read line; do
- result=
- case $line in
- PASS:*) result=PASS ;;
- FAIL:*) result=FAIL ;;
- XPASS:*) result=XPASS ;;
- XFAIL:*) result=XFAIL ;;
- SKIP:*) result=SKIP ;;
- ERROR:*) result=ERROR ;;
- esac
- if test -n "$result"; then
- case $result in FAIL|XPASS|ERROR) st=1;; esac
- # Output testcase result to console.
- echo "$result: $test_name"
- # Register testcase outcome for the log file.
- echo ":test-result: $line" >&5
- echo >&5
- fi
- done
- if test $st -eq 0; then
- recheck=no
- copy_in_global_log=no
- else
- recheck=yes
- copy_in_global_log=yes
- fi
- echo ":recheck: $recheck" >&5
- echo ":copy-in-global-log: $copy_in_global_log" >&5
- exec 5>&-
- ) | awk '{ print $0 ", testcase " NR }'
- ## And we're done.
- exit 0
|