From: Ralf Wildenhues Date: Sun, 12 Mar 2006 19:58:31 +0000 (+0000) Subject: * lib/autotest/general.m4 (AT_INIT) : Optimize X-Git-Tag: AUTOCONF-2.59c~146 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1d5a93433d499eaa6700a0936bbe3feeb5faef4;p=thirdparty%2Fautoconf.git * lib/autotest/general.m4 (AT_INIT) : Optimize `expr' away if there is nothing to do. < --keywords >: Simplify and robustify argument handling. Revert erroneous comment from 2005-08-23. Extend to allow keyword negation with `!'. Update help message. Remove broken code to prevent running tests multiple times. * doc/autoconf.texi (testsuite Invocation) < --keywords >: Update and fix the documentation accordingly. * tests/autotest.at (Keywords): Renamed to.. (Keywords and ranges): .. this. Extended to make sure negated keywords, keywords taken from AT_SETUP arguments, and numeric test ranges work, and that matching is case-insensitive. --- diff --git a/ChangeLog b/ChangeLog index 264b63409..17e9da4e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2006-03-12 Ralf Wildenhues + + * lib/autotest/general.m4 (AT_INIT) : Optimize + `expr' away if there is nothing to do. + < --keywords >: Simplify and robustify argument handling. + Revert erroneous comment from 2005-08-23. Extend to allow + keyword negation with `!'. + Update help message. Remove broken code to prevent running + tests multiple times. + * doc/autoconf.texi (testsuite Invocation) < --keywords >: + Update and fix the documentation accordingly. + * tests/autotest.at (Keywords): Renamed to.. + (Keywords and ranges): .. this. Extended to make sure negated + keywords, keywords taken from AT_SETUP arguments, and numeric + test ranges work, and that matching is case-insensitive. + 2006-03-11 Ralf Wildenhues * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW): Use a typedef to diff --git a/doc/autoconf.texi b/doc/autoconf.texi index d0e47d4a4..aeb7c3a77 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -16725,13 +16725,29 @@ selection. @itemx -k @var{keywords} Add to the selection the test groups with title or keywords (arguments to @code{AT_SETUP} or @code{AT_KEYWORDS}) that match @emph{all} keywords -of the comma separated list @var{keywords}. +of the comma separated list @var{keywords}, case-insensitively. Use +@samp{!} immediately before the keyword to invert the selection for this +keyword. By default, the keywords match whole words; enclose them in +@samp{.*} to also match parts of words. -Running @samp{./testsuite -k autoupdate,FUNC} will select all the tests -tagged with @samp{autoupdate} @emph{and} @samp{FUNC} (as in -@samp{AC_CHECK_FUNC}, @samp{AC_FUNC_FNMATCH}, etc.)@: while -@samp{./testsuite -k autoupdate -k FUNC} will select all tests tagged with -@samp{autoupdate} @emph{or} @samp{FUNC}. +For example, running + +@example +@kbd{./testsuite -k 'autoupdate,.*FUNC.*'} +@end example + +@noindent +will select all tests tagged @samp{autoupdate} @emph{and} with tags +containing @samp{FUNC} (as in @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_FNMATCH}, +etc.), while + +@example +@kbd{./testsuite -k '!autoupdate' -k '.*FUNC.*'} +@end example + +@noindent +will select all tests not tagged @samp{autoupdate} @emph{or} with tags +containing @samp{FUNC}. @item --errexit @itemx -e diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4 index 338cefd4e..d71b18829 100644 --- a/lib/autotest/general.m4 +++ b/lib/autotest/general.m4 @@ -83,7 +83,7 @@ # Modes help text. Additional modes can be appended as self-contained # cat'd here-docs as generated by AS_HELP_STRING. # - HELP_TUNING -# TUning help text. Additional tuning options can be appended as +# Tuning help text. Additional tuning options can be appended as # self-contained cat'd here-docs as generated by AS_HELP_STRING. # - HELP_OTHER # User help can be appended to this as self-contained cat'd here-docs. @@ -273,7 +273,10 @@ do at_prev= fi - at_optarg=`expr "x$at_option" : 'x[[^=]]*=\(.*\)'` + case $at_option in + *=*) at_optarg=`expr "x$at_option" : 'x[[^=]]*=\(.*\)'` ;; + *) at_optarg= ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -358,11 +361,23 @@ do ;; --keywords=* ) at_groups_selected=$at_help_all - for at_keyword in `IFS=,; set X $at_optarg; shift; echo ${1+$[@]}` + at_save_IFS=$IFS + IFS=, + set X $at_optarg + shift + IFS=$at_save_IFS + for at_keyword do - # Do not match the test group titles. - at_groups_selected=`echo "$at_groups_selected" | - grep -i ["^[1-9][^;]*;.*[; ]$at_keyword[ ;]"]` + at_invert= + case $at_keyword in + '!'*) + at_invert="-v" + at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` + ;; + esac + # It is on purpose that we match the test group titles too. + at_groups_selected=`echo "$at_groups_selected" | + grep -i $at_invert ["^[1-9][^;]*;.*[; ]$at_keyword[ ;]"]` done at_groups_selected=`echo "$at_groups_selected" | sed 's/;.*//'` # Smash the newlines. @@ -429,8 +444,8 @@ if $at_help_p; then cat <<_ATEOF Usage: $[0] [[OPTION]... [VARIABLE=VALUE]... [TESTS]] -Run all the tests, or the selected TESTS, and save a detailed log file. -Upon failure, create debugging scripts. +Run all the tests, or the selected TESTS, given by numeric ranges, and +save a detailed log file. Upon failure, create debugging scripts. You should not change environment variables unless explicitly passed as command line arguments. Set \`AUTOTEST_PATH' to select the executables @@ -459,8 +474,8 @@ cat <<_ATEOF Execution tuning: -k, --keywords=KEYWORDS - select the tests matching all the comma separated KEYWORDS - accumulates + select the tests matching all the comma-separated KEYWORDS + multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output default for debugging scripts @@ -674,12 +689,6 @@ do ;; *) - # Skip tests we already run (using --keywords makes it easy to get - # duplication). - case " $at_pass_test $at_skip_test $at_fail_test " in - *" $at_group "* ) continue;; - esac - at_group_normalized=$at_group _AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized) @@ -1159,7 +1168,7 @@ m4_divert_push([TEST_SCRIPT])dnl # AT_XFAIL_IF(SHELL-EXPRESSION) -# ----------------------------------- +# ----------------------------- # Set up the test to be expected to fail if SHELL-EXPRESSION evaluates to # true (exitcode = 0). m4_define([AT_XFAIL_IF], diff --git a/tests/autotest.at b/tests/autotest.at index d9efffde0..95594a3e8 100644 --- a/tests/autotest.at +++ b/tests/autotest.at @@ -2,7 +2,7 @@ AT_BANNER([Autotest.]) -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2006 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 @@ -246,7 +246,7 @@ AT_CHECK_AT_TITLE_CHAR([Backslash], [\]) ## --------- ## ## Keywords. ## ## --------- ## -AT_SETUP([Keywords]) +AT_SETUP([Keywords and ranges]) AT_KEYWORDS([autotest]) AT_DATA([k.at], @@ -289,4 +289,31 @@ AT_CHECK_KEYS([-k key1], [first|both], [2], [none|second], [0]) AT_CHECK_KEYS([-k key2], [second|both], [2], [none|first], [0]) AT_CHECK_KEYS([-k key1,key2], [both], [1], [none|first|second], [0]) AT_CHECK_KEYS([-k key1 -k key2], [first|second|both], [3], [none], [0]) +AT_CHECK_KEYS([-k '!key1'], [none|second], [2], [first|both], [0]) +AT_CHECK_KEYS([-k '!key2'], [none|first], [2], [second|both], [0]) +AT_CHECK_KEYS([-k '!key1,key2'], [second], [1], [none|first|both], [0]) +AT_CHECK_KEYS([-k 'key1,!key2'], [first], [1], [none|second|both], [0]) +AT_CHECK_KEYS([-k '!key1,!key2'], [none], [1], [first|second|both], [0]) +AT_CHECK_KEYS([-k '!key1' -k KEY2], [none|second|both], [3], [first], [0]) +AT_CHECK_KEYS([-k key1 -k '!key2'], [none|first|both], [3], [second], [0]) +AT_CHECK_KEYS([-k '!KEY1' -k '!key2'], [none|first|second], [3], [both], [0]) + +AT_CHECK_KEYS([-k none], [none], [1], [first|second|both], [0]) +AT_CHECK_KEYS([-k key1,both], [both], [1], [none|first|second], [0]) +AT_CHECK_KEYS([-k key1 -k both], [first|both], [2], [none|second], [0]) +AT_CHECK_KEYS([-k none,first], [successful], [1], [none|first|second|both], [0]) +AT_CHECK_KEYS([-k none,first,second,both], [successful], [1], [none|first|second|both], [0]) +AT_CHECK_KEYS([-k !none,first], [first], [1], [none|second|both], [0]) + +AT_CHECK_KEYS([-k '.*eco.*'], [second], [1], [none|first|both], [0]) +AT_CHECK_KEYS([-k 'ECO'], [successful], [1], [none|first|second|both], [0]) +AT_CHECK_KEYS([-k '.*eco'], [successful], [1], [none|first|second|both], [0]) +AT_CHECK_KEYS([-k 'eco.*'], [successful], [1], [none|first|second|both], [0]) +AT_CHECK_KEYS([-k 'fir.*'], [first], [1], [none|second|both], [0]) + +AT_CHECK_KEYS([1-2], [none|first], [2], [second|both], [0]) +AT_CHECK_KEYS([1-3 2-1], [none|first|second], [3], [both], [0]) +AT_CHECK_KEYS([-3], [none|first|second], [3], [both], [0]) +AT_CHECK_KEYS([4-], [both], [1], [none|first|second], [0]) +AT_CHECK_KEYS([-k second 4-], [second|both], [2], [none|first], [0]) AT_CLEANUP