>From 9dbc94e9692260fcc972bc1c9861d62c248b93da Mon Sep 17 00:00:00 2001 Message-Id: From: Stefano Lattarini Date: Sat, 13 Jul 2013 23:50:15 +0100 Subject: [PATCH] test harness: improve catching of usage errors in script 'test-driver' 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 passed a wrong number of non-option arguments (there should be just one of such arguments). Also, be sure to work correctly even when no '--' special argument is passed to separate option from non-options arguments. Signed-off-by: Stefano Lattarini --- lib/test-driver | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/test-driver b/lib/test-driver index 32bf39e..feb0c01 100755 --- a/lib/test-driver +++ b/lib/test-driver @@ -1,7 +1,7 @@ #! /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. # @@ -49,8 +49,6 @@ 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. @@ -69,10 +67,25 @@ while test $# -gt 0; do --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; + *) break;; 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 + +case $# in + 0) usage_error "missing argument";; + 1) ;; + *) usage_error "too many non-option arguments";; +esac + if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. -- 1.8.3.1.605.g85318f5