1*9712c20fSFrederick Mayle#! /bin/sh 2*9712c20fSFrederick Mayle# test-driver - basic testsuite driver script. 3*9712c20fSFrederick Mayle 4*9712c20fSFrederick Mayle# Slightly modified for Android, see ANDROID comment below. 5*9712c20fSFrederick Mayle 6*9712c20fSFrederick Maylescriptversion=2012-06-27.10; # UTC 7*9712c20fSFrederick Mayle 8*9712c20fSFrederick Mayle# Copyright (C) 2011-2013 Free Software Foundation, Inc. 9*9712c20fSFrederick Mayle# 10*9712c20fSFrederick Mayle# This program is free software; you can redistribute it and/or modify 11*9712c20fSFrederick Mayle# it under the terms of the GNU General Public License as published by 12*9712c20fSFrederick Mayle# the Free Software Foundation; either version 2, or (at your option) 13*9712c20fSFrederick Mayle# any later version. 14*9712c20fSFrederick Mayle# 15*9712c20fSFrederick Mayle# This program is distributed in the hope that it will be useful, 16*9712c20fSFrederick Mayle# but WITHOUT ANY WARRANTY; without even the implied warranty of 17*9712c20fSFrederick Mayle# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*9712c20fSFrederick Mayle# GNU General Public License for more details. 19*9712c20fSFrederick Mayle# 20*9712c20fSFrederick Mayle# You should have received a copy of the GNU General Public License 21*9712c20fSFrederick Mayle# along with this program. If not, see <http://www.gnu.org/licenses/>. 22*9712c20fSFrederick Mayle 23*9712c20fSFrederick Mayle# As a special exception to the GNU General Public License, if you 24*9712c20fSFrederick Mayle# distribute this file as part of a program that contains a 25*9712c20fSFrederick Mayle# configuration script generated by Autoconf, you may include it under 26*9712c20fSFrederick Mayle# the same distribution terms that you use for the rest of that program. 27*9712c20fSFrederick Mayle 28*9712c20fSFrederick Mayle# This file is maintained in Automake, please report 29*9712c20fSFrederick Mayle# bugs to <[email protected]> or send patches to 30*9712c20fSFrederick Mayle# <[email protected]>. 31*9712c20fSFrederick Mayle 32*9712c20fSFrederick Mayle# Make unconditional expansion of undefined variables an error. This 33*9712c20fSFrederick Mayle# helps a lot in preventing typo-related bugs. 34*9712c20fSFrederick Mayleset -u 35*9712c20fSFrederick Mayle 36*9712c20fSFrederick Mayleusage_error () 37*9712c20fSFrederick Mayle{ 38*9712c20fSFrederick Mayle echo "$0: $*" >&2 39*9712c20fSFrederick Mayle print_usage >&2 40*9712c20fSFrederick Mayle exit 2 41*9712c20fSFrederick Mayle} 42*9712c20fSFrederick Mayle 43*9712c20fSFrederick Mayleprint_usage () 44*9712c20fSFrederick Mayle{ 45*9712c20fSFrederick Mayle cat <<END 46*9712c20fSFrederick MayleUsage: 47*9712c20fSFrederick Mayle test-driver --test-name=NAME --log-file=PATH --trs-file=PATH 48*9712c20fSFrederick Mayle [--expect-failure={yes|no}] [--color-tests={yes|no}] 49*9712c20fSFrederick Mayle [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT 50*9712c20fSFrederick MayleThe '--test-name', '--log-file' and '--trs-file' options are mandatory. 51*9712c20fSFrederick MayleEND 52*9712c20fSFrederick Mayle} 53*9712c20fSFrederick Mayle 54*9712c20fSFrederick Mayle# TODO: better error handling in option parsing (in particular, ensure 55*9712c20fSFrederick Mayle# TODO: $log_file, $trs_file and $test_name are defined). 56*9712c20fSFrederick Mayletest_name= # Used for reporting. 57*9712c20fSFrederick Maylelog_file= # Where to save the output of the test script. 58*9712c20fSFrederick Mayletrs_file= # Where to save the metadata of the test run. 59*9712c20fSFrederick Mayleexpect_failure=no 60*9712c20fSFrederick Maylecolor_tests=no 61*9712c20fSFrederick Mayleenable_hard_errors=yes 62*9712c20fSFrederick Maylewhile test $# -gt 0; do 63*9712c20fSFrederick Mayle case $1 in 64*9712c20fSFrederick Mayle --help) print_usage; exit $?;; 65*9712c20fSFrederick Mayle --version) echo "test-driver $scriptversion"; exit $?;; 66*9712c20fSFrederick Mayle --test-name) test_name=$2; shift;; 67*9712c20fSFrederick Mayle --log-file) log_file=$2; shift;; 68*9712c20fSFrederick Mayle --trs-file) trs_file=$2; shift;; 69*9712c20fSFrederick Mayle --color-tests) color_tests=$2; shift;; 70*9712c20fSFrederick Mayle --expect-failure) expect_failure=$2; shift;; 71*9712c20fSFrederick Mayle --enable-hard-errors) enable_hard_errors=$2; shift;; 72*9712c20fSFrederick Mayle --) shift; break;; 73*9712c20fSFrederick Mayle -*) usage_error "invalid option: '$1'";; 74*9712c20fSFrederick Mayle esac 75*9712c20fSFrederick Mayle shift 76*9712c20fSFrederick Mayledone 77*9712c20fSFrederick Mayle 78*9712c20fSFrederick Mayleif test $color_tests = yes; then 79*9712c20fSFrederick Mayle # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. 80*9712c20fSFrederick Mayle red='[0;31m' # Red. 81*9712c20fSFrederick Mayle grn='[0;32m' # Green. 82*9712c20fSFrederick Mayle lgn='[1;32m' # Light green. 83*9712c20fSFrederick Mayle blu='[1;34m' # Blue. 84*9712c20fSFrederick Mayle mgn='[0;35m' # Magenta. 85*9712c20fSFrederick Mayle std='[m' # No color. 86*9712c20fSFrederick Mayleelse 87*9712c20fSFrederick Mayle red= grn= lgn= blu= mgn= std= 88*9712c20fSFrederick Maylefi 89*9712c20fSFrederick Mayle 90*9712c20fSFrederick Mayledo_exit='rm -f $log_file $trs_file; (exit $st); exit $st' 91*9712c20fSFrederick Mayletrap "st=129; $do_exit" 1 92*9712c20fSFrederick Mayletrap "st=130; $do_exit" 2 93*9712c20fSFrederick Mayletrap "st=141; $do_exit" 13 94*9712c20fSFrederick Mayletrap "st=143; $do_exit" 15 95*9712c20fSFrederick Mayle 96*9712c20fSFrederick Mayle# Test script is run here. 97*9712c20fSFrederick Mayle# ANDROID: old line was: "$@" > $log_file 2>&1 98*9712c20fSFrederick Mayleprogdir=$(dirname "$0") 99*9712c20fSFrederick Mayle"$progdir/test-shell.sh" "$@" > $log_file 2>&1 100*9712c20fSFrederick Mayleestatus=$? 101*9712c20fSFrederick Mayleif test $enable_hard_errors = no && test $estatus -eq 99; then 102*9712c20fSFrederick Mayle estatus=1 103*9712c20fSFrederick Maylefi 104*9712c20fSFrederick Mayle 105*9712c20fSFrederick Maylecase $estatus:$expect_failure in 106*9712c20fSFrederick Mayle 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 107*9712c20fSFrederick Mayle 0:*) col=$grn res=PASS recheck=no gcopy=no;; 108*9712c20fSFrederick Mayle 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 109*9712c20fSFrederick Mayle 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; 110*9712c20fSFrederick Mayle *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; 111*9712c20fSFrederick Mayle *:*) col=$red res=FAIL recheck=yes gcopy=yes;; 112*9712c20fSFrederick Mayleesac 113*9712c20fSFrederick Mayle 114*9712c20fSFrederick Mayle# Report outcome to console. 115*9712c20fSFrederick Mayleecho "${col}${res}${std}: $test_name" 116*9712c20fSFrederick Mayle 117*9712c20fSFrederick Mayle# Register the test result, and other relevant metadata. 118*9712c20fSFrederick Mayleecho ":test-result: $res" > $trs_file 119*9712c20fSFrederick Mayleecho ":global-test-result: $res" >> $trs_file 120*9712c20fSFrederick Mayleecho ":recheck: $recheck" >> $trs_file 121*9712c20fSFrederick Mayleecho ":copy-in-global-log: $gcopy" >> $trs_file 122*9712c20fSFrederick Mayle 123*9712c20fSFrederick Mayle# Local Variables: 124*9712c20fSFrederick Mayle# mode: shell-script 125*9712c20fSFrederick Mayle# sh-indentation: 2 126*9712c20fSFrederick Mayle# eval: (add-hook 'write-file-hooks 'time-stamp) 127*9712c20fSFrederick Mayle# time-stamp-start: "scriptversion=" 128*9712c20fSFrederick Mayle# time-stamp-format: "%:y-%02m-%02d.%02H" 129*9712c20fSFrederick Mayle# time-stamp-time-zone: "UTC" 130*9712c20fSFrederick Mayle# time-stamp-end: "; # UTC" 131*9712c20fSFrederick Mayle# End: 132