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

Re: [PATCH] Trapping exit in tests, using return for errors

From
PRPavel Roskin <proski@gnu.org>
Date
Aug 11, 2005, 16:00 UTC
Message-ID
<1123776040.2326.6.camel@dv>
In-Reply-To
<7vvf2dm1b8.fsf@assigned-by-dhcp.cox.net>
Hi, Junio!
On Wed, 2005-08-10 at 23:31 -0700, Junio C Hamano wrote:
Show 7 quoted lines
> Junio C Hamano <junkio@cox.net> writes:
> 
> > Sorry, sent it out without finishing.  The worst is "return".
> 
> Ah, my mistake.  You have the eval that can eval "return" in a
> function and let that "return" return from that function.
> Cleverly done.

I'm glad you appreciate it. One more fix on top of the last patch is needed.

"return" from a test would leave the exit trap set, which could cause a spurious error message if it's the last test in the script or --immediate is used.

The easiest solution would be to have a global trap that is set when test-lib.sh is sourced and unset either by test_done(), error() or by test_failure_() with --immediate. This patch also depends on the patch that adds test_done() the the scripts that don't have it.

Signed-off-by: Pavel Roskin <proski@gnu.org>
diff --git a/t/test-lib.sh b/t/test-lib.sh
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -36,6 +36,7 @@ unset SHA1_FILE_DIRECTORY
 
 error () {
 	echo "* error: $*"
+	trap - exit
 	exit 1
 }
 
@@ -74,6 +75,8 @@ fi
 test_failure=0
 test_count=0
 
+trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
+
 
 # You are not expected to call test_ok_ and test_failure_ directly, use
 # the text_expect_* functions instead.
@@ -89,7 +92,7 @@ test_failure_ () {
 	say "FAIL $test_count: $1"
 	shift
 	echo "$@" | sed -e 's/^/	/'
-	test "$immediate" == "" || exit 1
+	test "$immediate" == "" || { trap - exit; exit 1; }
 }
 
 
@@ -98,10 +101,8 @@ test_debug () {
 }
 
 test_run_ () {
-	trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
 	eval >&3 2>&4 "$1"
 	eval_ret="$?"
-	trap - exit
 	return 0
 }
 
@@ -132,6 +133,7 @@ test_expect_success () {
 }
 
 test_done () {
+	trap - exit
 	case "$test_failure" in
 	0)	
 		# We could:
-- 
Regards,
Pavel Roskin
Previous: Junio C Hamano
Message 5 of 5 in “Trapping exit in tests, using return for errors”
  1. Trapping exit in tests, using return for errorsPavel Roskin, Aug 11, 2005
  2. Junio C HamanoAug 11, 2005
  3. Junio C HamanoAug 11, 2005
  4. Junio C HamanoAug 11, 2005
  5. Pavel RoskinAug 11, 2005

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.