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

[PATCH 03/10] t6022 (renaming merge): chain test commands with &&

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 31, 2010, 07:34 UTC
Message-ID
<20101031073444.GD11483@burratino>
In-Reply-To
<20101031072640.GA11483@burratino>

Using 'return' in an attempt to end a test assertion can have unpredictable results (probably escaping from test_run_ and breaking its bookkeeping). Redo the control flow using helpers like test_expect_code and git diff --exit-code, so each test assertion can follow the usual form

	command that should succeed &&
	command that should succeed &&
	command that should succeed &&
	...
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 t/t6022-merge-rename.sh |  282 +++++++++++++++-------------------------------
 1 files changed, 92 insertions(+), 190 deletions(-)
diff --git a/t/t6022-merge-rename.sh b/t/t6022-merge-rename.sh
index b66544b..83efc7a 100755
--- a/t/t6022-merge-rename.sh
+++ b/t/t6022-merge-rename.sh
@@ -94,245 +94,147 @@ git checkout master'
 
 test_expect_success 'pull renaming branch into unrenaming one' \
 '
-	git show-branch
-	git pull . white && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	git ls-files -s
-	test "$(git ls-files -u B | wc -l)" -eq 3 || {
-		echo "BAD: should have left stages for B"
-		return 1
-	}
-	test "$(git ls-files -s N | wc -l)" -eq 1 || {
-		echo "BAD: should have merged N"
-		return 1
-	}
+	git show-branch &&
+	test_expect_code 1 git pull . white &&
+	git ls-files -s &&
+	git ls-files -u B >b.stages &&
+	test_line_count = 3 b.stages &&
+	git ls-files -s N >n.stages &&
+	test_line_count = 1 n.stages &&
 	sed -ne "/^g/{
 	p
 	q
-	}" B | grep master || {
-		echo "BAD: should have listed our change first"
-		return 1
-	}
-	test "$(git diff white N | wc -l)" -eq 0 || {
-		echo "BAD: should have taken colored branch"
-		return 1
-	}
+	}" B | grep master &&
+	git diff --exit-code white N
 '
 
 test_expect_success 'pull renaming branch into another renaming one' \
 '
-	rm -f B
-	git reset --hard
-	git checkout red
-	git pull . white && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	test "$(git ls-files -u B | wc -l)" -eq 3 || {
-		echo "BAD: should have left stages"
-		return 1
-	}
-	test "$(git ls-files -s N | wc -l)" -eq 1 || {
-		echo "BAD: should have merged N"
-		return 1
-	}
+	rm -f B &&
+	git reset --hard &&
+	git checkout red &&
+	test_expect_code 1 git pull . white &&
+	git ls-files -u B >b.stages &&
+	test_line_count = 3 b.stages &&
+	git ls-files -s N >n.stages &&
+	test_line_count = 1 n.stages &&
 	sed -ne "/^g/{
 	p
 	q
-	}" B | grep red || {
-		echo "BAD: should have listed our change first"
-		return 1
-	}
-	test "$(git diff white N | wc -l)" -eq 0 || {
-		echo "BAD: should have taken colored branch"
-		return 1
-	}
+	}" B | grep red &&
+	git diff --exit-code white N
 '
 
 test_expect_success 'pull unrenaming branch into renaming one' \
 '
-	git reset --hard
-	git show-branch
-	git pull . master && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	test "$(git ls-files -u B | wc -l)" -eq 3 || {
-		echo "BAD: should have left stages"
-		return 1
-	}
-	test "$(git ls-files -s N | wc -l)" -eq 1 || {
-		echo "BAD: should have merged N"
-		return 1
-	}
+	git reset --hard &&
+	git show-branch &&
+	test_expect_code 1 git pull . master &&
+	git ls-files -u B >b.stages &&
+	test_line_count = 3 b.stages &&
+	git ls-files -s N >n.stages &&
+	test_line_count = 1 n.stages &&
 	sed -ne "/^g/{
 	p
 	q
-	}" B | grep red || {
-		echo "BAD: should have listed our change first"
-		return 1
-	}
-	test "$(git diff white N | wc -l)" -eq 0 || {
-		echo "BAD: should have taken colored branch"
-		return 1
-	}
+	}" B | grep red &&
+	git diff --exit-code white N
 '
 
 test_expect_success 'pull conflicting renames' \
 '
-	git reset --hard
-	git show-branch
-	git pull . blue && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	test "$(git ls-files -u A | wc -l)" -eq 1 || {
-		echo "BAD: should have left a stage"
-		return 1
-	}
-	test "$(git ls-files -u B | wc -l)" -eq 1 || {
-		echo "BAD: should have left a stage"
-		return 1
-	}
-	test "$(git ls-files -u C | wc -l)" -eq 1 || {
-		echo "BAD: should have left a stage"
-		return 1
-	}
-	test "$(git ls-files -s N | wc -l)" -eq 1 || {
-		echo "BAD: should have merged N"
-		return 1
-	}
+	git reset --hard &&
+	git show-branch &&
+	test_expect_code 1 git pull . blue &&
+	git ls-files -u A >a.stages &&
+	test_line_count = 1 a.stages &&
+	git ls-files -u B >b.stages &&
+	test_line_count = 1 b.stages &&
+	git ls-files -u C >c.stages &&
+	test_line_count = 1 c.stages &&
+	git ls-files -s N >n.stages &&
+	test_line_count = 1 n.stages &&
 	sed -ne "/^g/{
 	p
 	q
-	}" B | grep red || {
-		echo "BAD: should have listed our change first"
-		return 1
-	}
-	test "$(git diff white N | wc -l)" -eq 0 || {
-		echo "BAD: should have taken colored branch"
-		return 1
-	}
+	}" B | grep red &&
+	git diff --exit-code white N
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-	git reset --hard
-	git show-branch
-	echo >A this file should not matter
-	git pull . white && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	test -f A || {
-		echo "BAD: should have left A intact"
-		return 1
-	}
+	git reset --hard &&
+	git show-branch &&
+	echo >A this file should not matter &&
+	test_expect_code 1 git pull . white &&
+	test_path_is_file A
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-	git reset --hard
-	git checkout white
-	git show-branch
-	rm -f A
-	echo >A this file should not matter
-	git pull . red && {
-		echo "BAD: should have conflicted"
-		return 1
-	}
-	test -f A || {
-		echo "BAD: should have left A intact"
-		return 1
-	}
+	git reset --hard &&
+	git checkout white &&
+	git show-branch &&
+	rm -f A &&
+	echo >A this file should not matter &&
+	test_expect_code 1 git pull . red &&
+	test_path_is_file A
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-	git reset --hard
-	rm -f A M
-	git checkout -f master
-	git tag -f anchor
-	git show-branch
-	git pull . yellow || {
-		echo "BAD: should have cleanly merged"
-		return 1
-	}
-	test -f M && {
-		echo "BAD: should have removed M"
-		return 1
-	}
+	git reset --hard &&
+	rm -f A M &&
+	git checkout -f master &&
+	git tag -f anchor &&
+	git show-branch &&
+	git pull . yellow &&
+	test_path_is_missing M &&
 	git reset --hard anchor
 '
 
 test_expect_success 'updated working tree file should prevent the merge' '
-
-	git reset --hard
-	rm -f A M
-	git checkout -f master
-	git tag -f anchor
-	git show-branch
-	echo >>M one line addition
-	cat M >M.saved
-	git pull . yellow && {
-		echo "BAD: should have complained"
-		return 1
-	}
-	test_cmp M M.saved || {
-		echo "BAD: should have left M intact"
-		return 1
-	}
+	git reset --hard &&
+	rm -f A M &&
+	git checkout -f master &&
+	git tag -f anchor &&
+	git show-branch &&
+	echo >>M one line addition &&
+	cat M >M.saved &&
+	test_expect_code 128 git pull . yellow &&
+	test_cmp M M.saved &&
 	rm -f M.saved
 '
 
 test_expect_success 'updated working tree file should prevent the merge' '
-
-	git reset --hard
-	rm -f A M
-	git checkout -f master
-	git tag -f anchor
-	git show-branch
-	echo >>M one line addition
-	cat M >M.saved
-	git update-index M
-	git pull . yellow && {
-		echo "BAD: should have complained"
-		return 1
-	}
-	test_cmp M M.saved || {
-		echo "BAD: should have left M intact"
-		return 1
-	}
+	git reset --hard &&
+	rm -f A M &&
+	git checkout -f master &&
+	git tag -f anchor &&
+	git show-branch &&
+	echo >>M one line addition &&
+	cat M >M.saved &&
+	git update-index M &&
+	test_expect_code 128 git pull . yellow &&
+	test_cmp M M.saved &&
 	rm -f M.saved
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-	git reset --hard
-	rm -f A M
-	git checkout -f yellow
-	git tag -f anchor
-	git show-branch
-	echo >M this file should not matter
-	git pull . master || {
-		echo "BAD: should have cleanly merged"
-		return 1
-	}
-	test -f M || {
-		echo "BAD: should have left M intact"
-		return 1
-	}
-	git ls-files -s | grep M && {
-		echo "BAD: M must be untracked in the result"
-		return 1
-	}
+	git reset --hard &&
+	rm -f A M &&
+	git checkout -f yellow &&
+	git tag -f anchor &&
+	git show-branch &&
+	echo >M this file should not matter &&
+	git pull . master &&
+	test_path_is_file M &&
+	! {
+		git ls-files -s |
+		grep M
+	} &&
 	git reset --hard anchor
 '
 
 test_expect_success 'merge of identical changes in a renamed file' '
-	rm -f A M N
+	rm -f A M N &&
 	git reset --hard &&
 	git checkout change+rename &&
 	GIT_MERGE_VERBOSITY=3 git merge change | grep "^Skipped B" &&
-- 
1.7.2.3.557.gab647.dirty
Previous: Ævar Arnfjörð BjarmasonNext: Jonathan Nieder
Message 37 of 62 in “[PATCHv6 00/16] Add missing &&'s in the testsuite”
  1. Elijah NewrenOct 3, 2010
  2. 01/16 test-lib: make test_expect_code a test commandElijah Newren, Oct 3, 2010
  3. Junio C HamanoOct 4, 2010
  4. Ævar Arnfjörð BjarmasonOct 4, 2010
  5. Jonathan NiederOct 4, 2010
  6. Ævar Arnfjörð BjarmasonOct 4, 2010
  7. Jonathan NiederOct 4, 2010
  8. Ævar Arnfjörð BjarmasonOct 4, 2010
  9. Jonathan NiederOct 4, 2010
  10. Ævar Arnfjörð BjarmasonOct 4, 2010
  11. 02/16 t3020 (ls-files-error-unmatch): remove stray '1' from end of fileElijah Newren, Oct 3, 2010
  12. Junio C HamanoOct 4, 2010
  13. 03/16 t4017 (diff-retval): replace manual exit code check with test_expect_codeElijah Newren, Oct 3, 2010
  14. 04/16 t100[12] (read-tree-m-2way, read_tree_m_u_2way): add missing &&Elijah Newren, Oct 3, 2010
  15. 05/16 t4002 (diff-basic): use test_might_fail for commands that might failElijah Newren, Oct 3, 2010
  16. 06/16 t4202 (log): Replace '<git-command> || :' with test_might_failElijah Newren, Oct 3, 2010
  17. 07/16 t3600 (rm): add lots of missing &&Elijah Newren, Oct 3, 2010
  18. Jonathan NiederOct 3, 2010
  19. Junio C HamanoOct 3, 2010
  20. 08/16 t4019 (diff-wserror): add lots of missing &&Elijah Newren, Oct 3, 2010
  21. 09/16 t4026 (color): remove unneeded and unchained commandElijah Newren, Oct 3, 2010
  22. 10/16 t5602 (clone-remote-exec): add missing &&Elijah Newren, Oct 3, 2010
  23. 11/16 t6016 (rev-list-graph-simplify-history): add missing &&Elijah Newren, Oct 3, 2010
  24. 12/16 t7001 (mv): add missing &&Elijah Newren, Oct 3, 2010
  25. 13/16 t7601 (merge-pull-config): add missing &&Elijah Newren, Oct 3, 2010
  26. 14/16 t7800 (difftool): add missing &&Elijah Newren, Oct 3, 2010
  27. 15/16 Add missing &&'s throughout the testsuiteElijah Newren, Oct 3, 2010
  28. Jonathan NiederOct 3, 2010
  29. Jonathan NiederOct 3, 2010
  30. tests: add missing &&Jonathan Nieder, Oct 31, 2010
  31. Junio C HamanoOct 31, 2010
  32. 00/10 Re: [PATCH en/cascade-tests] tests: add missing &&Jonathan Nieder, Oct 31, 2010
  33. 01/10 tests: add missing &&, batch 2Jonathan Nieder, Oct 31, 2010
  34. 02/10 test-lib: introduce test_line_count to measure filesJonathan Nieder, Oct 31, 2010
  35. Junio C HamanoNov 9, 2010
  36. Ævar Arnfjörð BjarmasonNov 9, 2010
  37. 03/10 t6022 (renaming merge): chain test commands with &&Jonathan Nieder, Oct 31, 2010
  38. 04/10 t1502 (rev-parse --parseopt): test exit code from "-h"Jonathan Nieder, Oct 31, 2010
  39. 05/10 t1400 (update-ref): use test_must_failJonathan Nieder, Oct 31, 2010
  40. 06/10 t3301 (notes): use test_expect_code for clarityJonathan Nieder, Oct 31, 2010
  41. 07/10 t3404 (rebase -i): unroll test_commit loopsJonathan Nieder, Oct 31, 2010
  42. 08/10 t3404 (rebase -i): move comment to descriptionJonathan Nieder, Oct 31, 2010
  43. Junio C HamanoNov 17, 2010
  44. 09/10 t3404 (rebase -i): introduce helper to check position of HEADJonathan Nieder, Oct 31, 2010
  45. Junio C HamanoNov 17, 2010
  46. 10/10 t4124 (apply --whitespace): use test_might_failJonathan Nieder, Oct 31, 2010
  47. Junio C HamanoNov 9, 2010
  48. Elijah NewrenNov 5, 2010
  49. 16/16 Introduce portable_unset and use it to ensure proper && chainingElijah Newren, Oct 3, 2010
  50. Ævar Arnfjörð BjarmasonOct 4, 2010
  51. Jonathan NiederOct 4, 2010
  52. Junio C HamanoOct 4, 2010
  53. Jonathan NiederOct 4, 2010
  54. Jonathan NiederOct 3, 2010
  55. Ævar Arnfjörð BjarmasonOct 4, 2010
  56. Jonathan NiederOct 4, 2010
  57. Ævar Arnfjörð BjarmasonOct 4, 2010
  58. yj2133011Oct 4, 2010
  59. test-lib: &&-chaining testerJonathan Nieder, Oct 6, 2010
  60. Matthieu MoyOct 6, 2010
  61. Johannes SixtOct 6, 2010
  62. Sverre RabbelierOct 6, 2010

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.