From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v4 2/5] test-lib: Make the test_external_* functions TAP-aware
Date: Thu, 24 Jun 2010 17:44:46 +0000 [thread overview]
Message-ID: <1277401489-27885-3-git-send-email-avarab@gmail.com> (raw)
In-Reply-To: <1277401489-27885-1-git-send-email-avarab@gmail.com>
Before TAP we just ran the Perl test and assumed that it failed if
nothing was printed on STDERR. Continue doing that, but introduce a
`test_external_has_tap' variable which tests can set to indicate that
they're outputting TAP.
If it's set we won't output a test plan, but trust the external test
to do so. That way we can make external tests work with a TAP harness,
but still maintain compatibility with test-lib's own way of tracking
tests through the test-results directory.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
t/t9700-perl-git.sh | 3 +++
t/t9700/test.pl | 11 +++++++++++
t/test-lib.sh | 51 +++++++++++++++++++++++++++++++++++++++------------
3 files changed, 53 insertions(+), 12 deletions(-)
diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
index 8686086..0b92726 100755
--- a/t/t9700-perl-git.sh
+++ b/t/t9700-perl-git.sh
@@ -46,6 +46,9 @@ test_expect_success \
git config --add test.int 2k
'
+# The external test will outputs its own plan
+test_external_has_tap=1
+
test_external_without_stderr \
'Perl API' \
"$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
index 666722d..e5d4b03 100755
--- a/t/t9700/test.pl
+++ b/t/t9700/test.pl
@@ -7,6 +7,13 @@ use strict;
use Test::More qw(no_plan);
+BEGIN {
+ # t9700-perl-git.sh kicks off our testing, so we have to go from
+ # there.
+ $Test::Builder::Test->{Curr_Test} = 1;
+ $Test::Builder::Test->{No_Ending} = 1;
+}
+
use Cwd;
use File::Basename;
@@ -105,3 +112,7 @@ my $last_commit = $r2->command_oneline(qw(rev-parse --verify HEAD));
like($last_commit, qr/^[0-9a-fA-F]{40}$/, 'rev-parse returned hash');
my $dir_commit = $r2->command_oneline('log', '-n1', '--pretty=format:%H', '.');
isnt($last_commit, $dir_commit, 'log . does not show last commit');
+
+printf "1..%d\n", $Test::Builder::Test->{Curr_Test};
+
+exit($Test::Builder::Test->{Is_Passing} ? 0 : 1);
diff --git a/t/test-lib.sh b/t/test-lib.sh
index e97645c..7077210 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -206,6 +206,8 @@ test_fixed=0
test_broken=0
test_success=0
+test_external_has_tap=0
+
die () {
code=$?
if test -n "$GIT_EXIT_OK"
@@ -456,7 +458,7 @@ test_expect_code () {
# test_external runs external test scripts that provide continuous
# test output about their progress, and succeeds/fails on
# zero/non-zero exit code. It outputs the test output on stdout even
-# in non-verbose mode, and announces the external script with "* run
+# in non-verbose mode, and announces the external script with "# run
# <n>: ..." before running it. When providing relative paths, keep in
# mind that all scripts run in "trash directory".
# Usage: test_external description command arguments...
@@ -471,7 +473,7 @@ test_external () {
then
# Announce the script to reduce confusion about the
# test output that follows.
- say_color "" " run $test_count: $descr ($*)"
+ say_color "" "# run $test_count: $descr ($*)"
# Export TEST_DIRECTORY, TRASH_DIRECTORY and GIT_TEST_LONG
# to be able to use them in script
export TEST_DIRECTORY TRASH_DIRECTORY GIT_TEST_LONG
@@ -481,9 +483,19 @@ test_external () {
"$@" 2>&4
if [ "$?" = 0 ]
then
- test_ok_ "$descr"
+ if test $test_external_has_tap -eq 0; then
+ test_ok_ "$descr"
+ else
+ say_color "" "# test_external test $descr was ok"
+ test_success=$(($test_success + 1))
+ fi
else
- test_failure_ "$descr" "$@"
+ if test $test_external_has_tap -eq 0; then
+ test_failure_ "$descr" "$@"
+ else
+ say_color error "# test_external test $descr failed: $@"
+ test_failure=$(($test_failure + 1))
+ fi
fi
fi
}
@@ -499,19 +511,30 @@ test_external_without_stderr () {
[ -f "$stderr" ] || error "Internal error: $stderr disappeared."
descr="no stderr: $1"
shift
- say >&3 "expecting no stderr from previous command"
+ say >&3 "# expecting no stderr from previous command"
if [ ! -s "$stderr" ]; then
rm "$stderr"
- test_ok_ "$descr"
+
+ if test $test_external_has_tap -eq 0; then
+ test_ok_ "$descr"
+ else
+ say_color "" "# test_external_without_stderr test $descr was ok"
+ test_success=$(($test_success + 1))
+ fi
else
if [ "$verbose" = t ]; then
- output=`echo; echo Stderr is:; cat "$stderr"`
+ output=`echo; echo "# Stderr is:"; cat "$stderr"`
else
output=
fi
# rm first in case test_failure exits.
rm "$stderr"
- test_failure_ "$descr" "$@" "$output"
+ if test $test_external_has_tap -eq 0; then
+ test_failure_ "$descr" "$@" "$output"
+ else
+ say_color error "# test_external_without_stderr test $descr failed: $@: $output"
+ test_failure=$(($test_failure + 1))
+ fi
fi
}
@@ -634,8 +657,10 @@ test_done () {
# Maybe print SKIP message
[ -z "$skip_all" ] || skip_all=" # SKIP $skip_all"
- say_color pass "# passed all $msg"
- say "1..$test_count$skip_all"
+ if test $test_external_has_tap -eq 0; then
+ say_color pass "# passed all $msg"
+ say "1..$test_count$skip_all"
+ fi
test -d "$remove_trash" &&
cd "$(dirname "$remove_trash")" &&
@@ -644,8 +669,10 @@ test_done () {
exit 0 ;;
*)
- say_color error "# failed $test_failure among $msg"
- say "1..$test_count"
+ if test $test_external_has_tap -eq 0; then
+ say_color error "# failed $test_failure among $msg"
+ say "1..$test_count"
+ fi
exit 1 ;;
--
1.7.1.251.g92a7
next prev parent reply other threads:[~2010-06-24 17:45 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-24 17:44 [PATCH v4 0/5] TAP support for Git Ævar Arnfjörð Bjarmason
2010-06-24 17:44 ` [PATCH v4 1/5] test-lib: Adjust output to be valid TAP format Ævar Arnfjörð Bjarmason
2010-06-24 18:39 ` Jakub Narebski
2010-06-24 19:17 ` Ævar Arnfjörð Bjarmason
2010-06-24 21:52 ` [PATCH v5 " Ævar Arnfjörð Bjarmason
2010-06-25 17:21 ` Junio C Hamano
2010-06-25 21:24 ` Ævar Arnfjörð Bjarmason
2010-06-25 21:36 ` Junio C Hamano
2010-06-25 21:39 ` Ævar Arnfjörð Bjarmason
2010-06-24 17:44 ` Ævar Arnfjörð Bjarmason [this message]
2010-06-24 17:44 ` [PATCH v4 3/5] test-lib: output a newline before "ok" under a TAP harness Ævar Arnfjörð Bjarmason
2010-06-24 17:44 ` [PATCH v4 4/5] tests: Skip tests in a way that makes sense under TAP Ævar Arnfjörð Bjarmason
2010-06-24 17:44 ` [PATCH v4 5/5] tests: Say "pass" rather than "ok" on empty lines for TAP Ævar Arnfjörð Bjarmason
2010-06-26 12:21 ` [PATCH] t9700: Use Test::More->builder, not $Test::Builder::Test Ævar Arnfjörð Bjarmason
2010-06-26 12:42 ` [PATCH v2] " Ævar Arnfjörð Bjarmason
2010-06-27 18:27 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1277401489-27885-3-git-send-email-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).