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

[PATCH v2 05/16] t2018: teach do_checkout() to accept `!` arg

From
Denton Liu <liu.denton@gmail.com>
Date
Jan 7, 2020, 04:53 UTC
Message-ID
<c43c11b91243b253702204241feb88adb3936ffe.1578372682.git.liu.denton@gmail.com>
In-Reply-To
<cover.1578372682.git.liu.denton@gmail.com>

We are running `test_must_fail do_checkout`. However, `test_must_fail` should only be used on git commands. Teach do_checkout() to accept `!` as a potential first argument which will cause the function to expect the "git checkout" to fail.

This increases the granularity of the test as, instead of blindly checking that do_checkout() failed, we check that only the specific expected invocation of git fails.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 t/t2018-checkout-branch.sh | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh
index 7ca55efc6b..687ab6713c 100755
--- a/t/t2018-checkout-branch.sh
+++ b/t/t2018-checkout-branch.sh
@@ -4,7 +4,7 @@ test_description='checkout'
 
 . ./test-lib.sh
 
-# Arguments: <branch> <sha> [<checkout options>]
+# Arguments: [!] <branch> <sha> [<checkout options>]
 #
 # Runs "git checkout" to switch to <branch>, testing that
 #
@@ -12,7 +12,16 @@ test_description='checkout'
 #   2) HEAD is <sha>; if <sha> is not specified, the old HEAD is used.
 #
 # If <checkout options> is not specified, "git checkout" is run with -b.
+#
+# If the first argument is `!`, "git checkout" is expected to fail when
+# it is run.
 do_checkout () {
+	should_fail= &&
+	if test "x$1" = "x!"
+	then
+		should_fail=yes &&
+		shift
+	fi &&
 	exp_branch=$1 &&
 	exp_ref="refs/heads/$exp_branch" &&
 
@@ -27,10 +36,14 @@ do_checkout () {
 		opts="$3"
 	fi
 
-	git checkout $opts $exp_branch $exp_sha &&
-
-	test $exp_ref = $(git rev-parse --symbolic-full-name HEAD) &&
-	test $exp_sha = $(git rev-parse --verify HEAD)
+	if test -n "$should_fail"
+	then
+		test_must_fail git checkout $opts $exp_branch $exp_sha
+	else
+		git checkout $opts $exp_branch $exp_sha &&
+		test $exp_ref = $(git rev-parse --symbolic-full-name HEAD) &&
+		test $exp_sha = $(git rev-parse --verify HEAD)
+	fi
 }
 
 test_dirty_unmergeable () {
@@ -91,7 +104,7 @@ test_expect_success 'checkout -b to a new branch, set to an explicit ref' '
 
 test_expect_success 'checkout -b to a new branch with unmergeable changes fails' '
 	setup_dirty_unmergeable &&
-	test_must_fail do_checkout branch2 $HEAD1 &&
+	do_checkout ! branch2 $HEAD1 &&
 	test_dirty_unmergeable
 '
 
@@ -125,7 +138,7 @@ test_expect_success 'checkout -f -b to a new branch with mergeable changes disca
 
 test_expect_success 'checkout -b to an existing branch fails' '
 	test_when_finished git reset --hard HEAD &&
-	test_must_fail do_checkout branch2 $HEAD2
+	do_checkout ! branch2 $HEAD2
 '
 
 test_expect_success 'checkout -b to @{-1} fails with the right branch name' '
@@ -164,7 +177,7 @@ test_expect_success 'checkout -B to an existing branch with unmergeable changes
 	git checkout branch1 &&
 
 	setup_dirty_unmergeable &&
-	test_must_fail do_checkout branch2 $HEAD1 -B &&
+	do_checkout ! branch2 $HEAD1 -B &&
 	test_dirty_unmergeable
 '
 
-- 
2.25.0.rc1.180.g49a268d3eb
Previous: Denton LiuNext: Denton Liu
Message 42 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.