1b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#! /bin/sh
2b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# test-driver - basic testsuite driver script.
3b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
4b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurariscriptversion=2013-07-13.22; # UTC
5b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
6b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari# Copyright (C) 2011-2013 Free Software Foundation, Inc.
7b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
8b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# This program is free software; you can redistribute it and/or modify
9b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# it under the terms of the GNU General Public License as published by
10b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# the Free Software Foundation; either version 2, or (at your option)
11b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# any later version.
12b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
13b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# This program is distributed in the hope that it will be useful,
14b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# but WITHOUT ANY WARRANTY; without even the implied warranty of
15b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# GNU General Public License for more details.
17b50c217251b086440efcdb273c22f86a06c80cbaChris Craik#
18b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# You should have received a copy of the GNU General Public License
19b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
21b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# As a special exception to the GNU General Public License, if you
22b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# distribute this file as part of a program that contains a
23b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# configuration script generated by Autoconf, you may include it under
24b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# the same distribution terms that you use for the rest of that program.
25b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
26b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# This file is maintained in Automake, please report
27b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# bugs to <bug-automake@gnu.org> or send patches to
28b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# <automake-patches@gnu.org>.
29b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
30b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Make unconditional expansion of undefined variables an error.  This
31b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# helps a lot in preventing typo-related bugs.
32b50c217251b086440efcdb273c22f86a06c80cbaChris Craikset -u
33b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
34b50c217251b086440efcdb273c22f86a06c80cbaChris Craikusage_error ()
35b50c217251b086440efcdb273c22f86a06c80cbaChris Craik{
36b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  echo "$0: $*" >&2
37b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  print_usage >&2
38b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  exit 2
39b50c217251b086440efcdb273c22f86a06c80cbaChris Craik}
40b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
41b50c217251b086440efcdb273c22f86a06c80cbaChris Craikprint_usage ()
42b50c217251b086440efcdb273c22f86a06c80cbaChris Craik{
43b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  cat <<END
44b50c217251b086440efcdb273c22f86a06c80cbaChris CraikUsage:
45b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
46b50c217251b086440efcdb273c22f86a06c80cbaChris Craik              [--expect-failure={yes|no}] [--color-tests={yes|no}]
47b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari              [--enable-hard-errors={yes|no}] [--]
48b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
49b50c217251b086440efcdb273c22f86a06c80cbaChris CraikThe '--test-name', '--log-file' and '--trs-file' options are mandatory.
50b50c217251b086440efcdb273c22f86a06c80cbaChris CraikEND
51b50c217251b086440efcdb273c22f86a06c80cbaChris Craik}
52b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
53b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktest_name= # Used for reporting.
54b50c217251b086440efcdb273c22f86a06c80cbaChris Craiklog_file=  # Where to save the output of the test script.
55b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktrs_file=  # Where to save the metadata of the test run.
56b50c217251b086440efcdb273c22f86a06c80cbaChris Craikexpect_failure=no
57b50c217251b086440efcdb273c22f86a06c80cbaChris Craikcolor_tests=no
58b50c217251b086440efcdb273c22f86a06c80cbaChris Craikenable_hard_errors=yes
59b50c217251b086440efcdb273c22f86a06c80cbaChris Craikwhile test $# -gt 0; do
60b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  case $1 in
61b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --help) print_usage; exit $?;;
62b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --version) echo "test-driver $scriptversion"; exit $?;;
63b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --test-name) test_name=$2; shift;;
64b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --log-file) log_file=$2; shift;;
65b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --trs-file) trs_file=$2; shift;;
66b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --color-tests) color_tests=$2; shift;;
67b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --expect-failure) expect_failure=$2; shift;;
68b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --enable-hard-errors) enable_hard_errors=$2; shift;;
69b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  --) shift; break;;
70b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  -*) usage_error "invalid option: '$1'";;
71b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari   *) break;;
72b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  esac
73b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  shift
74b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdone
75b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
76b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurarimissing_opts=
77b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripuraritest x"$test_name" = x && missing_opts="$missing_opts --test-name"
78b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripuraritest x"$log_file"  = x && missing_opts="$missing_opts --log-file"
79b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripuraritest x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
80b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurariif test x"$missing_opts" != x; then
81b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari  usage_error "the following mandatory options are missing:$missing_opts"
82b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurarifi
83b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari
84b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurariif test $# -eq 0; then
85b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari  usage_error "missing argument"
86b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurarifi
87b478e66e7c2621eef5f465e4629ce642db00716bSireesh Tripurari
88b50c217251b086440efcdb273c22f86a06c80cbaChris Craikif test $color_tests = yes; then
89b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
90b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  red='[0;31m' # Red.
91b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  grn='[0;32m' # Green.
92b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  lgn='[1;32m' # Light green.
93b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  blu='[1;34m' # Blue.
94b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  mgn='[0;35m' # Magenta.
95b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  std='[m'     # No color.
96b50c217251b086440efcdb273c22f86a06c80cbaChris Craikelse
97b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  red= grn= lgn= blu= mgn= std=
98b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfi
99b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
100b50c217251b086440efcdb273c22f86a06c80cbaChris Craikdo_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
101b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktrap "st=129; $do_exit" 1
102b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktrap "st=130; $do_exit" 2
103b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktrap "st=141; $do_exit" 13
104b50c217251b086440efcdb273c22f86a06c80cbaChris Craiktrap "st=143; $do_exit" 15
105b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
106b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Test script is run here.
107b50c217251b086440efcdb273c22f86a06c80cbaChris Craik"$@" >$log_file 2>&1
108b50c217251b086440efcdb273c22f86a06c80cbaChris Craikestatus=$?
109b50c217251b086440efcdb273c22f86a06c80cbaChris Craikif test $enable_hard_errors = no && test $estatus -eq 99; then
110b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  estatus=1
111b50c217251b086440efcdb273c22f86a06c80cbaChris Craikfi
112b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
113b50c217251b086440efcdb273c22f86a06c80cbaChris Craikcase $estatus:$expect_failure in
114b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
115b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
116b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
117b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
118b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
119b50c217251b086440efcdb273c22f86a06c80cbaChris Craik  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
120b50c217251b086440efcdb273c22f86a06c80cbaChris Craikesac
121b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
122b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Report outcome to console.
123b50c217251b086440efcdb273c22f86a06c80cbaChris Craikecho "${col}${res}${std}: $test_name"
124b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
125b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Register the test result, and other relevant metadata.
126b50c217251b086440efcdb273c22f86a06c80cbaChris Craikecho ":test-result: $res" > $trs_file
127b50c217251b086440efcdb273c22f86a06c80cbaChris Craikecho ":global-test-result: $res" >> $trs_file
128b50c217251b086440efcdb273c22f86a06c80cbaChris Craikecho ":recheck: $recheck" >> $trs_file
129b50c217251b086440efcdb273c22f86a06c80cbaChris Craikecho ":copy-in-global-log: $gcopy" >> $trs_file
130b50c217251b086440efcdb273c22f86a06c80cbaChris Craik
131b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# Local Variables:
132b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# mode: shell-script
133b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# sh-indentation: 2
134b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# eval: (add-hook 'write-file-hooks 'time-stamp)
135b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# time-stamp-start: "scriptversion="
136b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# time-stamp-format: "%:y-%02m-%02d.%02H"
137b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# time-stamp-time-zone: "UTC"
138b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# time-stamp-end: "; # UTC"
139b50c217251b086440efcdb273c22f86a06c80cbaChris Craik# End:
140