test-lib: verbose mode for only tests matching a pattern
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. We can use the test_start/end functions from the previous commit for the purpose. This is arguably not *too* useful on its own, but makes the next patch easier to follow. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Thomas Rast <trast@inf.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
517cd55fd5
commit
ff09af3fb8
5
t/README
5
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.
|
||||
|
@ -250,6 +250,30 @@ test_expect_success 'test --verbose' '
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test --verbose-only' '
|
||||
test_must_fail run_sub_test_lib_test \
|
||||
test-verbose-only-2 "test verbose-only=2" \
|
||||
--verbose-only=2 <<-\EOF &&
|
||||
test_expect_success "passing test" true
|
||||
test_expect_success "test with output" "echo foo"
|
||||
test_expect_success "failing test" false
|
||||
test_done
|
||||
EOF
|
||||
check_sub_test_lib_test test-verbose-only-2 <<-\EOF
|
||||
> ok 1 - passing test
|
||||
> Z
|
||||
> expecting success: echo foo
|
||||
> foo
|
||||
> Z
|
||||
> ok 2 - test with output
|
||||
> Z
|
||||
> not ok 3 - failing test
|
||||
> # false
|
||||
> # failed 1 among 3 test(s)
|
||||
> 1..3
|
||||
EOF
|
||||
'
|
||||
|
||||
test_set_prereq HAVEIT
|
||||
haveit=no
|
||||
test_expect_success HAVEIT 'test runs if prerequisite is satisfied' '
|
||||
|
@ -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,32 @@ 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
|
||||
}
|
||||
|
||||
test_eval_ () {
|
||||
# This is a separate function because some tests use
|
||||
# "return" to end a test_expect_success block early.
|
||||
@ -371,10 +400,12 @@ test_run_ () {
|
||||
|
||||
test_start_ () {
|
||||
test_count=$(($test_count+1))
|
||||
maybe_setup_verbose
|
||||
}
|
||||
|
||||
test_finish_ () {
|
||||
echo >&3 ""
|
||||
maybe_teardown_verbose
|
||||
}
|
||||
|
||||
test_skip () {
|
||||
|
Loading…
Reference in New Issue
Block a user