With the new --verbose-only=<pattern> option, one can enable --verbose at a per-test granularity. The pattern is matched against the test number, e.g. ./t0000-basic.sh --verbose-only='2[0-2]' to see only the full output of test 20-22, while showing the rest in the one-liner format. As suggested by Jeff King, this takes care to wrap the entire test_expect_* block, but nothing else, in the verbose toggling. To that end we use a new pair of hook functions. The placement is a bit weird because we need to wait until the beginning of test_skip for $test_count to be incremented. This is arguably not *too* useful on its own, but makes the next patch easier to follow. Helped-by: Jeff King <peff@xxxxxxxx> Signed-off-by: Thomas Rast <trast@xxxxxxxxxxx> --- t/README | 5 +++++ t/test-lib-functions.sh | 2 ++ t/test-lib.sh | 44 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/t/README b/t/README index 35b3c5c..f4e6299 100644 --- a/t/README +++ b/t/README @@ -76,6 +76,11 @@ appropriately before running "make". command being run and their output if any are also output. +--verbose-only=<pattern>:: + Like --verbose, but the effect is limited to tests with + numbers matching <pattern>. The number matched against is + simply the running count of the test within the file. + --debug:: This may help the person who is developing a new test. It causes the command defined with test_debug to run. diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 5251009..0eac1dd 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -358,6 +358,7 @@ test_expect_failure () { fi fi echo >&3 "" + test_teardown_hook_ } test_expect_success () { @@ -376,6 +377,7 @@ test_expect_success () { fi fi echo >&3 "" + test_teardown_hook_ } # test_external runs external test scripts that provide continuous diff --git a/t/test-lib.sh b/t/test-lib.sh index d9a74ff..84e5f03 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -184,6 +184,9 @@ do help=t; shift ;; -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) verbose=t; shift ;; + --verbose-only=*) + verbose_only=$(expr "z$1" : 'z[^=]*=\(.*\)') + shift ;; -q|--q|--qu|--qui|--quie|--quiet) # Ignore --quiet under a TAP::Harness. Saying how many tests # passed without the ok/not ok details is always an error. @@ -342,6 +345,44 @@ match_pattern_list () { return 1 } +maybe_teardown_verbose () { + test -z "$verbose_only" && return + exec 4>/dev/null 3>/dev/null + verbose= +} + +last_verbose=t +maybe_setup_verbose () { + test -z "$verbose_only" && return + if match_pattern_list $test_count $verbose_only + then + exec 4>&2 3>&1 + # Emit a delimiting blank line when going from + # non-verbose to verbose. Within verbose mode the + # delimiter is printed by test_expect_*. The choice + # of the initial $last_verbose is such that before + # test 1, we do not print it. + test -z "$last_verbose" && echo >&3 "" + verbose=t + else + exec 4>/dev/null 3>/dev/null + verbose= + fi + last_verbose=$verbose +} + +# Called from test_skip after it has incremented $test_count. This +# means it runs before any test-specific code and output. +test_setup_hook_ () { + maybe_setup_verbose +} + +# Called at the end of test_expect_*. This means it runs after all +# test-specific code and output. +test_teardown_hook_ () { + maybe_teardown_verbose +} + test_eval_ () { # This is a separate function because some tests use # "return" to end a test_expect_success block early. @@ -358,9 +399,7 @@ test_run_ () { if test -z "$immediate" || test $eval_ret = 0 || test -n "$expecting_failure" then - setup_malloc_check test_eval_ "$test_cleanup" - teardown_malloc_check fi if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE" then @@ -372,6 +411,7 @@ test_run_ () { test_skip () { test_count=$(($test_count+1)) to_skip= + test_setup_hook_ if match_pattern_list $this_test.$test_count $GIT_SKIP_TESTS then to_skip=t -- 1.8.3.1.530.g6f90e57 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html