Skip to content

Commit

Permalink
[PATCH] Trapping exit in tests, using return for errors
Browse files Browse the repository at this point in the history
I have noticed that "make test" fails without any explanations when the
"merge" utility is missing.  I don't think tests should be silent in
case of failure.

It turned out that the particular test was using "exit" to interrupt the
test in case of an error.  This caused the whole test script to exit.
No further tests would be run even if "--immediate" wasn't specified.
No error message was printed.

This patch does following:

All instances of "exit", "exit 1" and "(exit 1)" in tests have been
replaced with "return 1".  In fact, "(exit 1)" had no effect.

File descriptor 5 is duplicated from file descriptor 1.  This is needed
to print important error messages from tests.

New function test_run_() has been introduced.  Any "return" in the test
would merely cause that function to return without skipping calls to
test_failure_() and test_ok_().  The new function also traps "exit" and
treats it like a fatal error (in case somebody reintroduces "exit" in
the tests).

test_expect_failure() and test_expect_success() check both the result of
eval and the return value of test_run_().  If the later is not 0, it's
always a failure because it indicates the the test didn't complete.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Pavel Roskin authored and Junio C Hamano committed Aug 12, 2005
1 parent d9bdd39 commit 4d9d62f
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 28 deletions.
8 changes: 4 additions & 4 deletions t/t1001-read-tree-m-2way.sh
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ test_expect_success \
git-checkout-cache -u -f -q -a &&
git-update-cache --add yomin &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >4.out || exit
git-ls-files --stage >4.out || return 1
diff -u M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean'
Expand All @@ -114,7 +114,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >5.out || exit
git-ls-files --stage >5.out || return 1
diff -u M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty'
Expand Down Expand Up @@ -215,7 +215,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >14.out || exit
git-ls-files --stage >14.out || return 1
diff -u M.out 14.out >14diff.out
compare_change 14diff.out expected &&
check_cache_at nitfol clean'
Expand All @@ -229,7 +229,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >15.out || exit
git-ls-files --stage >15.out || return 1
diff -u M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty'
Expand Down
8 changes: 4 additions & 4 deletions t/t1002-read-tree-m-u-2way.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ test_expect_success \
'rm -f .git/index &&
git-update-cache --add yomin &&
git-read-tree -m -u $treeH $treeM &&
git-ls-files --stage >4.out || exit
git-ls-files --stage >4.out || return 1
diff --unified=0 M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean &&
Expand All @@ -90,7 +90,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
git-read-tree -m -u $treeH $treeM &&
git-ls-files --stage >5.out || exit
git-ls-files --stage >5.out || return 1
diff --unified=0 M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty &&
Expand Down Expand Up @@ -192,7 +192,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
git-read-tree -m -u $treeH $treeM &&
git-ls-files --stage >14.out || exit
git-ls-files --stage >14.out || return 1
diff --unified=0 M.out 14.out >14diff.out
compare_change 14diff.out expected &&
sum bozbar frotz >actual14.sum &&
Expand All @@ -212,7 +212,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
git-read-tree -m -u $treeH $treeM &&
git-ls-files --stage >15.out || exit
git-ls-files --stage >15.out || return 1
diff --unified=0 M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty &&
Expand Down
10 changes: 5 additions & 5 deletions t/t1005-read-tree-m-2way-emu23.sh
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ test_expect_success \
git-checkout-cache -u -f -q -a &&
git-update-cache --add yomin &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >4.out || exit
git-ls-files --stage >4.out || return 1
diff -u M.out 4.out >4diff.out
compare_change 4diff.out expected &&
check_cache_at yomin clean'
Expand All @@ -136,7 +136,7 @@ test_expect_success \
git-update-cache --add yomin &&
echo yomin yomin >yomin &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >5.out || exit
git-ls-files --stage >5.out || return 1
diff -u M.out 5.out >5diff.out
compare_change 5diff.out expected &&
check_cache_at yomin dirty'
Expand Down Expand Up @@ -241,7 +241,7 @@ test_expect_success \
echo nitfol nitfol >nitfol &&
git-update-cache --add nitfol &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >14.out || exit
git-ls-files --stage >14.out || return 1
diff -u M.out 14.out >14diff.out
compare_change 14diff.out expected &&
check_cache_at nitfol clean'
Expand All @@ -255,7 +255,7 @@ test_expect_success \
git-update-cache --add nitfol &&
echo nitfol nitfol nitfol >nitfol &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >15.out || exit
git-ls-files --stage >15.out || return 1
diff -u M.out 15.out >15diff.out
compare_change 15diff.out expected &&
check_cache_at nitfol dirty'
Expand Down Expand Up @@ -352,7 +352,7 @@ test_expect_success \
sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
git-update-cache --add bozbar &&
read_tree_twoway $treeH $treeM &&
git-ls-files --stage >22.out || exit
git-ls-files --stage >22.out || return 1
diff -u M.out 22.out >22diff.out
compare_change 22diff.out &&
check_cache_at bozbar clean'
Expand Down
6 changes: 3 additions & 3 deletions t/t4002-diff-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_A &&
git-checkout-cache -f -a &&
git-read-tree -m $tree_O || (exit 1)
git-read-tree -m $tree_O || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-OA'
Expand All @@ -201,7 +201,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_B &&
git-checkout-cache -f -a &&
git-read-tree -m $tree_O || (exit 1)
git-read-tree -m $tree_O || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-OB'
Expand All @@ -211,7 +211,7 @@ test_expect_success \
'rm -fr Z [A-Z][A-Z] &&
git-read-tree $tree_B &&
git-checkout-cache -f -a &&
git-read-tree -m $tree_A || (exit 1)
git-read-tree -m $tree_A || return 1
git-update-cache --refresh >/dev/null ;# this can exit non-zero
git-diff-files >.test-a &&
cmp_diff_files_output .test-a .test-recursive-AB'
Expand Down
12 changes: 6 additions & 6 deletions t/t5300-pack-object.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ test_expect_success \
for i in a b c
do
dd if=/dev/zero bs=4k count=1 | tr "\\0" $i >$i &&
git-update-cache --add $i || exit
git-update-cache --add $i || return 1
done &&
cat c >d && echo foo >>d && git-update-cache --add d &&
tree=`git-write-tree` &&
Expand All @@ -29,7 +29,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
git-cat-file $t $object || exit 1
git-cat-file $t $object || return 1
done <obj-list
} >expect'

Expand Down Expand Up @@ -58,7 +58,7 @@ test_expect_success \
do
cmp $path ../.git/$path || {
echo $path differs.
exit 1
return 1
}
done'
cd $TRASH
Expand Down Expand Up @@ -88,7 +88,7 @@ test_expect_success \
do
cmp $path ../.git/$path || {
echo $path differs.
exit 1
return 1
}
done'
cd $TRASH
Expand All @@ -106,7 +106,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
git-cat-file $t $object || exit 1
git-cat-file $t $object || return 1
done <obj-list
} >current &&
diff expect current'
Expand All @@ -122,7 +122,7 @@ test_expect_success \
while read object
do
t=`git-cat-file -t $object` &&
git-cat-file $t $object || exit 1
git-cat-file $t $object || return 1
done <obj-list
} >current &&
diff expect current'
Expand Down
4 changes: 2 additions & 2 deletions t/t5400-send-pack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ test_expect_success setup '
do
sleep 1 &&
commit=$(echo "Commit #$i" | git-commit-tree $tree -p $parent) &&
parent=$commit || exit
parent=$commit || return 1
done &&
echo "$commit" >.git/HEAD &&
git clone -l ./. victim &&
Expand All @@ -31,7 +31,7 @@ test_expect_success setup '
do
sleep 1 &&
commit=$(echo "Rebase #$i" | git-commit-tree $tree -p $parent) &&
parent=$commit || exit
parent=$commit || return 1
done &&
echo "$commit" >.git/HEAD &&
echo Rebase &&
Expand Down
19 changes: 15 additions & 4 deletions t/test-lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ do
esac
done

exec 5>&1
if test "$verbose" = "t"
then
exec 4>&2 3>&1
Expand Down Expand Up @@ -96,23 +97,33 @@ test_debug () {
test "$debug" = "" || eval "$1"
}

test_run_ () {
trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
eval >&3 2>&4 "$1"
eval_ret="$?"
trap - exit
return 0
}

test_expect_failure () {
test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test-expect-failure"
say >&3 "expecting failure: $2"
if eval >&3 2>&4 "$2"
test_run_ "$2"
if [ "$?" = 0 -a "$eval_ret" != 0 ]
then
test_failure_ "$@"
else
test_ok_ "$1"
else
test_failure_ "$@"
fi
}

test_expect_success () {
test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test-expect-success"
say >&3 "expecting success: $2"
if eval >&3 2>&4 "$2"
test_run_ "$2"
if [ "$?" = 0 -a "$eval_ret" = 0 ]
then
test_ok_ "$1"
else
Expand Down

0 comments on commit 4d9d62f

Please sign in to comment.