test harness: improve catching of usage errors in script 'test-driver'
authorStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 13 Jul 2013 22:50:15 +0000 (23:50 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Sun, 21 Jul 2013 13:00:03 +0000 (14:00 +0100)
Fixes automake bug#14840.

* lib/test-driver: Catch and report usage errors where the caller has
forgotten to specify one of the mandatory options (--test-name,
--log-file, --trs-file) or has not passed any non-option argument.
Also, be sure to work correctly even when no '--' special argument
is passed to separate option from non-options arguments.
* THANKS: Update.

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
THANKS
lib/test-driver

diff --git a/THANKS b/THANKS
index cc5e238..b708943 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -405,6 +405,7 @@ Ulrich Drepper                  drepper@gnu.ai.mit.edu
 Ulrich Eckhardt                 eckhardt@satorlaser.com
 Václav Haisman                  V.Haisman@sh.cvut.cz
 Vadim Zeitlin                   Vadim.zeitlin@dptmaths.ens-cachan.fr
 Ulrich Eckhardt                 eckhardt@satorlaser.com
 Václav Haisman                  V.Haisman@sh.cvut.cz
 Vadim Zeitlin                   Vadim.zeitlin@dptmaths.ens-cachan.fr
+Vasyl Khalak                    basiliomail@gmail.com
 Vincent Lefevre                 vincent@vinc17.org
 Vladimir Serbinenko             phcoder@gmail.com
 Volker Boerchers                vboerchers@tecon.de
 Vincent Lefevre                 vincent@vinc17.org
 Vladimir Serbinenko             phcoder@gmail.com
 Volker Boerchers                vboerchers@tecon.de
index 32bf39e..d306056 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # test-driver - basic testsuite driver script.
 
 #! /bin/sh
 # test-driver - basic testsuite driver script.
 
-scriptversion=2012-06-27.10; # UTC
+scriptversion=2013-07-13.22; # UTC
 
 # Copyright (C) 2011-2013 Free Software Foundation, Inc.
 #
 
 # Copyright (C) 2011-2013 Free Software Foundation, Inc.
 #
@@ -44,13 +44,12 @@ print_usage ()
 Usage:
   test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
               [--expect-failure={yes|no}] [--color-tests={yes|no}]
 Usage:
   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
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
 The '--test-name', '--log-file' and '--trs-file' options are mandatory.
 END
 }
 
 The '--test-name', '--log-file' and '--trs-file' options are mandatory.
 END
 }
 
-# TODO: better error handling in option parsing (in particular, ensure
-# TODO: $log_file, $trs_file and $test_name are defined).
 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.
 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.
@@ -69,10 +68,23 @@ while test $# -gt 0; do
   --enable-hard-errors) enable_hard_errors=$2; shift;;
   --) shift; break;;
   -*) usage_error "invalid option: '$1'";;
   --enable-hard-errors) enable_hard_errors=$2; shift;;
   --) shift; break;;
   -*) usage_error "invalid option: '$1'";;
+   *) break;;
   esac
   shift
 done
 
   esac
   shift
 done
 
+missing_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"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
 if test $color_tests = yes; then
   # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
   red='\e[0;31m' # Red.
 if test $color_tests = yes; then
   # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
   red='\e[0;31m' # Red.