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

[PATCH v3] t2018: be more discerning when checking for expected exit codes

From
Denton Liu <liu.denton@gmail.com>
Date
Jan 26, 2020, 20:23 UTC
Message-ID
<4af0c20e2981ed7e361083a71cb25b9f4a55fa4f.1580069736.git.liu.denton@gmail.com>
In-Reply-To
<587e53053f02ad0867dc903688c8887602950bd3.1578372682.git.liu.denton@gmail.com>

Functions test_dirty_unmergeable() and test_dirty_mergeable() expect git-diff to exit with the specific code 1. However, rather than checking for that value explicitly, they instead negate the exit code. Unfortunately, this negation makes it impossible to distinguish the expected code from some other unexpected non-zero code, for instance, from a segmentation fault. Therefore, be more discerning by checking the exit code explicitly using test_expect_code().

Furthermore, some callers of those functions want to negate the result again, and do so with test_must_fail(). However, test_must_fail() should only be used with git commands. Address this by introducing a couple new tiny helper functions which test the exact condition expected (without the unnecessarily confusing double-negation).

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
This patch is a complete replacement for 4/16: "t2018: use
test_expect_code for failing git commands"[1] in
"dl/test-must-fail-fixes-2". It replaces the commit message with a
much-improved version from Eric. Other than that, no code changes are
made.
[1]: https://lore.kernel.org/git/587e53053f02ad0867dc903688c8887602950bd3.1578372682.git.liu.denton@gmail.com/
 t/t2018-checkout-branch.sh | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh
index 61206a90fb..7ca55efc6b 100755
--- a/t/t2018-checkout-branch.sh
+++ b/t/t2018-checkout-branch.sh
@@ -34,7 +34,11 @@ do_checkout () {
 }
 
 test_dirty_unmergeable () {
-	! git diff --exit-code >/dev/null
+	test_expect_code 1 git diff --exit-code
+}
+
+test_dirty_unmergeable_discards_changes () {
+	git diff --exit-code
 }
 
 setup_dirty_unmergeable () {
@@ -42,7 +46,11 @@ setup_dirty_unmergeable () {
 }
 
 test_dirty_mergeable () {
-	! git diff --cached --exit-code >/dev/null
+	test_expect_code 1 git diff --cached --exit-code
+}
+
+test_dirty_mergeable_discards_changes () {
+	git diff --cached --exit-code
 }
 
 setup_dirty_mergeable () {
@@ -94,7 +102,7 @@ test_expect_success 'checkout -f -b to a new branch with unmergeable changes dis
 
 	# still dirty and on branch1
 	do_checkout branch2 $HEAD1 "-f -b" &&
-	test_must_fail test_dirty_unmergeable
+	test_dirty_unmergeable_discards_changes
 '
 
 test_expect_success 'checkout -b to a new branch preserves mergeable changes' '
@@ -112,7 +120,7 @@ test_expect_success 'checkout -f -b to a new branch with mergeable changes disca
 	test_when_finished git reset --hard HEAD &&
 	setup_dirty_mergeable &&
 	do_checkout branch2 $HEAD1 "-f -b" &&
-	test_must_fail test_dirty_mergeable
+	test_dirty_mergeable_discards_changes
 '
 
 test_expect_success 'checkout -b to an existing branch fails' '
@@ -163,7 +171,7 @@ test_expect_success 'checkout -B to an existing branch with unmergeable changes
 test_expect_success 'checkout -f -B to an existing branch with unmergeable changes discards changes' '
 	# still dirty and on branch1
 	do_checkout branch2 $HEAD1 "-f -B" &&
-	test_must_fail test_dirty_unmergeable
+	test_dirty_unmergeable_discards_changes
 '
 
 test_expect_success 'checkout -B to an existing branch preserves mergeable changes' '
@@ -180,7 +188,7 @@ test_expect_success 'checkout -f -B to an existing branch with mergeable changes
 
 	setup_dirty_mergeable &&
 	do_checkout branch2 $HEAD1 "-f -B" &&
-	test_must_fail test_dirty_mergeable
+	test_dirty_mergeable_discards_changes
 '
 
 test_expect_success 'checkout -b <describe>' '
-- 
2.25.0.rc1.180.g49a268d3eb
Previous: Eric SunshineNext: Denton Liu
Message 41 of 54 in “t: replace incorrect test_must_fail usage (part 2)”
  1. 00/16 t: replace incorrect test_must_fail usage (part 2)Denton Liu, Dec 27, 2019
  2. 01/16 t2018: remove trailing space from test descriptionDenton Liu, Dec 27, 2019
  3. 02/16 t2018: add space between function name and ()Denton Liu, Dec 27, 2019
  4. Eric SunshineDec 27, 2019
  5. 04/16 t2018: teach do_checkout() to accept `!` argDenton Liu, Dec 27, 2019
  6. Eric SunshineDec 28, 2019
  7. 03/16 t2018: use test_must_fail for failing git commandsDenton Liu, Dec 27, 2019
  8. Eric SunshineDec 28, 2019
  9. Jakub NarebskiDec 30, 2019
  10. 06/16 t2018: replace "sha" with "oid"Denton Liu, Dec 27, 2019
  11. 05/16 t2018: don't lose return code of git commandsDenton Liu, Dec 27, 2019
  12. Eric SunshineDec 27, 2019
  13. Denton LiuJan 1, 2020
  14. Eric SunshineJan 1, 2020
  15. Junio C HamanoJan 2, 2020
  16. 07/16 t3030: use test_path_is_missing()Denton Liu, Dec 27, 2019
  17. 10/16 t3415: increase granularity of test_auto_{fixup,squash}()Denton Liu, Dec 27, 2019
  18. 09/16 t3415: stop losing return codes of git commandsDenton Liu, Dec 27, 2019
  19. 12/16 t3504: don't use `test_must_fail test_cmp`Denton Liu, Dec 27, 2019
  20. Johannes SixtDec 27, 2019
  21. Junio C HamanoDec 27, 2019
  22. 13/16 t3507: fix indentationDenton Liu, Dec 27, 2019
  23. 15/16 t4124: only mark git command with test_must_failDenton Liu, Dec 27, 2019
  24. 16/16 t4124: let sed open its own filesDenton Liu, Dec 27, 2019
  25. Jakub NarebskiDec 30, 2019
  26. Junio C HamanoDec 30, 2019
  27. Denton LiuJan 1, 2020
  28. Eric SunshineJan 1, 2020
  29. Denton LiuJan 1, 2020
  30. 11/16 t3419: stop losing return code of git commandDenton Liu, Dec 27, 2019
  31. 14/16 t3507: use test_path_is_missing()Denton Liu, Dec 27, 2019
  32. 08/16 t3310: extract common no_notes_merge_left()Denton Liu, Dec 27, 2019
  33. Eric SunshineDec 28, 2019
  34. Jakub NarebskiDec 30, 2019
  35. 00/16 t: replace incorrect test_must_fail usage (part 2)Denton Liu, Jan 7, 2020
  36. 01/16 t2018: remove trailing space from test descriptionDenton Liu, Jan 7, 2020
  37. 02/16 t2018: add space between function name and ()Denton Liu, Jan 7, 2020
  38. 03/16 t2018: improve style of if-statementDenton Liu, Jan 7, 2020
  39. 04/16 t2018: use test_expect_code for failing git commandsDenton Liu, Jan 7, 2020
  40. Eric SunshineJan 12, 2020
  41. t2018: be more discerning when checking for expected exit codesDenton Liu, Jan 26, 2020
  42. 05/16 t2018: teach do_checkout() to accept `!` argDenton Liu, Jan 7, 2020
  43. 06/16 t2018: don't lose return code of git commandsDenton Liu, Jan 7, 2020
  44. 07/16 t2018: replace "sha" with "oid"Denton Liu, Jan 7, 2020
  45. 09/16 t3310: extract common notes_merge_files_gone()Denton Liu, Jan 7, 2020
  46. 10/16 t3415: stop losing return codes of git commandsDenton Liu, Jan 7, 2020
  47. 14/16 t3507: fix indentationDenton Liu, Jan 7, 2020
  48. 16/16 t4124: only mark git command with test_must_failDenton Liu, Jan 7, 2020
  49. 13/16 t3504: do check for conflict marker after failed cherry-pickDenton Liu, Jan 7, 2020
  50. 12/16 t3419: stop losing return code of git commandDenton Liu, Jan 7, 2020
  51. 15/16 t3507: use test_path_is_missing()Denton Liu, Jan 7, 2020
  52. 08/16 t3030: use test_path_is_missing()Denton Liu, Jan 7, 2020
  53. 11/16 t3415: increase granularity of test_auto_{fixup,squash}()Denton Liu, Jan 7, 2020
  54. Eric SunshineJan 10, 2020

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.