t: wrap complicated expect_code users in a block
authorJeff King <peff@peff.net>
Fri, 20 Mar 2015 10:12:29 +0000 (06:12 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2015 17:20:16 +0000 (10:20 -0700)
If we are expecting a command to produce a particular exit
code, we can use test_expect_code. However, some cases are
more complicated, and want to accept one of a range of exit
codes. For these, we end up with something like:

  cmd;
  case "$?" in
  ...

That unfortunately breaks the &&-chain and fools
--chain-lint. Since these special cases are so few, we can
wrap them in a block, like this:

  { cmd; ret=$?; } &&
  case "$ret" in
  ...

This accomplishes the same thing, and retains the &&-chain
(the exit status fed to the && is that of the assignment,
which should always be true). It's technically longer, but
it is probably a good thing for unusual code like this to
stand out.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t0005-signals.sh
t/t4026-color.sh
t/t5004-archive-corner-cases.sh
t/t5512-ls-remote.sh

index aeea50c..5c5707d 100755 (executable)
@@ -10,8 +10,8 @@ one
 EOF
 
 test_expect_success 'sigchain works' '
-       test-sigchain >actual
-       case "$?" in
+       { test-sigchain >actual; ret=$?; } &&
+       case "$ret" in
        143) true ;; # POSIX w/ SIGTERM=15
        271) true ;; # ksh w/ SIGTERM=15
          3) true ;; # Windows
index 4d20fea..2b32c4f 100755 (executable)
@@ -111,9 +111,9 @@ test_expect_success 'unknown color slots are ignored (branch)' '
 '
 
 test_expect_success 'unknown color slots are ignored (status)' '
-       git config color.status.nosuchslotwilleverbedefined white || exit
-       git status
-       case $? in 0|1) : ok ;; *) false ;; esac
+       git config color.status.nosuchslotwilleverbedefined white &&
+       { git status; ret=$?; } &&
+       case $ret in 0|1) : ok ;; *) false ;; esac
 '
 
 test_done
index 305bcac..654adda 100755 (executable)
@@ -66,8 +66,10 @@ test_expect_success UNZIP 'zip archive of empty tree is empty' '
        # handle the empty repo at all, making our later check of its exit code
        # a no-op). But we cannot do anything reasonable except skip the test
        # on such platforms anyway, and this is the moral equivalent.
-       "$GIT_UNZIP" "$TEST_DIRECTORY"/t5004/empty.zip
-       expect_code=$?
+       {
+               "$GIT_UNZIP" "$TEST_DIRECTORY"/t5004/empty.zip
+               expect_code=$?
+       } &&
 
        git archive --format=zip HEAD >empty.zip &&
        make_dir extract &&
index 321c3e5..3bd9759 100755 (executable)
@@ -103,8 +103,10 @@ test_expect_success 'confuses pattern as remote when no remote specified' '
 '
 
 test_expect_success 'die with non-2 for wrong repository even with --exit-code' '
-       git ls-remote --exit-code ./no-such-repository ;# not &&
-       status=$? &&
+       {
+               git ls-remote --exit-code ./no-such-repository
+               status=$?
+       } &&
        test $status != 2 && test $status != 0
 '