git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 3/5] We use TAP so the Perl test can run without scaffolding

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jun 15, 2010, 22:32 UTC
Message-ID
<1276641178-32420-4-git-send-email-avarab@gmail.com>
In-Reply-To
<AANLkTimxE0mqmitRzlXjSAO6v7IOEg4guUnRlzJUyIF1@mail.gmail.com>

Before TAP we ran the Perl test and assumed that it failed if nothing was printed on STDERR. Now we pass control over to it and rely on its exit code, which is only non-zero if a test fails.

Running the Perl test with --verbose now gives meaningful output.

This removes the test_external and test_external_without_stderr functions added by Lea Wiemann in fb32c410087e68d650b31f68e66b3d9cbcce4a56. Nothing else used them, and now that we're using TAP they shouldn't be necessary.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 t/t9700-perl-git.sh |    8 ++----
 t/t9700/test.pl     |   11 +++++++++
 t/test-lib.sh       |   62 ---------------------------------------------------
 3 files changed, 14 insertions(+), 67 deletions(-)
diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
index 3999bf7..17252ab 100755
--- a/t/t9700-perl-git.sh
+++ b/t/t9700-perl-git.sh
@@ -46,8 +46,6 @@ test_expect_success \
      git config --add test.int 2k
      '
 
-test_external_without_stderr \
-    'Perl API' \
-    "$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl
-
-test_done
+"$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl &&
+    # The Perl test finalizes the plan, so don't call test_done() here.
+    GIT_EXIT_OK=t
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..37987d7 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -453,68 +453,6 @@ test_expect_code () {
 	echo >&3 ""
 }
 
-# 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
-# <n>: ..." before running it.  When providing relative paths, keep in
-# mind that all scripts run in "trash directory".
-# Usage: test_external description command arguments...
-# Example: test_external 'Perl API' perl ../path/to/test.pl
-test_external () {
-	test "$#" = 4 && { prereq=$1; shift; } || prereq=
-	test "$#" = 3 ||
-	error >&5 "bug in the test script: not 3 or 4 parameters to test_external"
-	descr="$1"
-	shift
-	if ! test_skip "$descr" "$@"
-	then
-		# Announce the script to reduce confusion about the
-		# test output that follows.
-		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
-		# Run command; redirect its stderr to &4 as in
-		# test_run_, but keep its stdout on our stdout even in
-		# non-verbose mode.
-		"$@" 2>&4
-		if [ "$?" = 0 ]
-		then
-			test_ok_ "$descr"
-		else
-			test_failure_ "$descr" "$@"
-		fi
-	fi
-}
-
-# Like test_external, but in addition tests that the command generated
-# no output on stderr.
-test_external_without_stderr () {
-	# The temporary file has no (and must have no) security
-	# implications.
-	tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi
-	stderr="$tmp/git-external-stderr.$$.tmp"
-	test_external "$@" 4> "$stderr"
-	[ -f "$stderr" ] || error "Internal error: $stderr disappeared."
-	descr="no stderr: $1"
-	shift
-	say >&3 "expecting no stderr from previous command"
-	if [ ! -s "$stderr" ]; then
-		rm "$stderr"
-		test_ok_ "$descr"
-	else
-		if [ "$verbose" = t ]; then
-			output=`echo; echo Stderr is:; cat "$stderr"`
-		else
-			output=
-		fi
-		# rm first in case test_failure exits.
-		rm "$stderr"
-		test_failure_ "$descr" "$@" "$output"
-	fi
-}
-
 # This is not among top-level (test_expect_success | test_expect_failure)
 # but is a prefix that can be used in the test script, like:
 #
-- 
1.7.1.251.g92a7
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 18 of 20 in “Make the Git tests emit TAP format”
  1. 0/3 Make the Git tests emit TAP formatÆvar Arnfjörð Bjarmason, Jun 9, 2010
  2. 1/3 Make test-lib.sh emit valid TAP formatÆvar Arnfjörð Bjarmason, Jun 9, 2010
  3. Jakub NarebskiJun 14, 2010
  4. Ævar Arnfjörð BjarmasonJun 14, 2010
  5. 2/3 Skip tests in a way that makes sense under TAPÆvar Arnfjörð Bjarmason, Jun 9, 2010
  6. 3/3 We use TAP so the Perl test can run without scaffoldingÆvar Arnfjörð Bjarmason, Jun 9, 2010
  7. Jakub NarebskiJun 14, 2010
  8. Ævar Arnfjörð BjarmasonJun 14, 2010
  9. Ævar Arnfjörð BjarmasonJun 14, 2010
  10. Junio C HamanoJun 15, 2010
  11. Ævar Arnfjörð BjarmasonJun 15, 2010
  12. Ævar Arnfjörð BjarmasonJun 15, 2010
  13. Andreas EricssonJun 15, 2010
  14. Ævar Arnfjörð BjarmasonJun 15, 2010
  15. 0/5 TAP support for GitÆvar Arnfjörð Bjarmason, Jun 15, 2010
  16. 1/5 Make test-lib.sh emit valid TAP formatÆvar Arnfjörð Bjarmason, Jun 15, 2010
  17. 2/5 Skip tests in a way that makes sense under TAPÆvar Arnfjörð Bjarmason, Jun 15, 2010
  18. 3/5 We use TAP so the Perl test can run without scaffoldingÆvar Arnfjörð Bjarmason, Jun 15, 2010
  19. 4/5 TAP: Say "pass" rather than "ok" on an empty lineÆvar Arnfjörð Bjarmason, Jun 15, 2010
  20. 5/5 TAP: Make sure there's a newline before "ok" under harnessÆvar Arnfjörð Bjarmason, Jun 15, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.