#! /bin/sh# test-driver - basic testsuite driver script.scriptversion=2013-07-13.22;# UTC# Copyright (C) 2011-2014 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/>.# As a special exception to the GNU General Public License, if you# distribute this file as part of a program that contains a# configuration script generated by Autoconf, you may include it under# the same distribution terms that you use for the rest of that program.# This file is maintained in Automake, please report# bugs to <bug-automake@gnu.org> or send patches to# <automake-patches@gnu.org>.# Make unconditional expansion of undefined variables an error. This# helps a lot in preventing typo-related bugs.set -u
usage_error (){echo"$0: $*" >&2
print_usage >&2exit2}
print_usage (){
cat <<ENDUsage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]The '--test-name', '--log-file' and '--trs-file' options are mandatory.END}test_name=# Used for reporting.log_file=# Where to save the output of the test script.trs_file=# Where to save the metadata of the test run.expect_failure=no
color_tests=no
enable_hard_errors=yes
whiletest$# -gt 0;docase$1 in
--help) print_usage;exit$?;;
--version)echo"test-driver $scriptversion";exit$?;;
--test-name)test_name=$2; shift;;
--log-file)log_file=$2; shift;;
--trs-file)trs_file=$2; shift;;
--color-tests)color_tests=$2; shift;;
--expect-failure)expect_failure=$2; shift;;
--enable-hard-errors)enable_hard_errors=$2; shift;;
--) shift; break;;
-*) usage_error "invalid option: '$1'";;
*) break;;esacshiftdonemissing_opts=test x"$test_name"= x &&missing_opts="$missing_opts --test-name"test x"$log_file"= x &&missing_opts="$missing_opts --log-file"test x"$trs_file"= x &&missing_opts="$missing_opts --trs-file"iftest x"$missing_opts" != x;then
usage_error "the following mandatory options are missing:$missing_opts"fiiftest$# -eq 0;then
usage_error "missing argument"fiiftest$color_tests= yes;then# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.red='[0;31m'# Red.grn='[0;32m'# Green.lgn='[1;32m'# Light green.blu='[1;34m'# Blue.mgn='[0;35m'# Magenta.std='[m'# No color.elsered=grn=lgn=blu=mgn=std=fido_exit='rm -f $log_file $trs_file; (exit $st); exit $st'trap"st=129; $do_exit"1trap"st=130; $do_exit"2trap"st=141; $do_exit"13trap"st=143; $do_exit"15# Test script is run here."$@" >$log_file2>&1estatus=$?iftest$enable_hard_errors= no &&test$estatus -eq 99;thentweaked_estatus=1elsetweaked_estatus=$estatusficase$tweaked_estatus:$expect_failure in
0:yes)col=$redres=XPASS recheck=yes gcopy=yes;;0:*)col=$grnres=PASS recheck=no gcopy=no;;77:*)col=$blures=SKIP recheck=no gcopy=yes;;99:*)col=$mgnres=ERROR recheck=yes gcopy=yes;;
*:yes)col=$lgnres=XFAIL recheck=no gcopy=yes;;
*:*)col=$redres=FAIL recheck=yes gcopy=yes;;esac# Report the test outcome and exit status in the logs, so that one can# know whether the test passed or failed simply by looking at the '.log'# file, without the need of also peaking into the corresponding '.trs'# file (automake bug#11814).echo"$res$test_name (exit status: $estatus)" >>$log_file# Report outcome to console.echo"${col}${res}${std}: $test_name"# Register the test result, and other relevant metadata.echo":test-result: $res" > $trs_fileecho":global-test-result: $res" >> $trs_fileecho":recheck: $recheck" >> $trs_fileecho":copy-in-global-log: $gcopy" >> $trs_file# Local Variables:# mode: shell-script# sh-indentation: 2# eval: (add-hook 'write-file-hooks 'time-stamp)# time-stamp-start: "scriptversion="# time-stamp-format: "%:y-%02m-%02d.%02H"# time-stamp-time-zone: "UTC"# time-stamp-end: "; # UTC"# End: