From: Jonathan Nieder <jrnieder@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Elijah Newren <newren@gmail.com>, git@vger.kernel.org, avarab@gmail.com
Subject: [PATCH 03/10] t6022 (renaming merge): chain test commands with &&
Date: Sun, 31 Oct 2010 02:34:44 -0500 [thread overview]
Message-ID: <20101031073444.GD11483@burratino> (raw)
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
next prev parent reply other threads:[~2010-10-31 7:35 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-03 19:59 [PATCHv6 00/16] Add missing &&'s in the testsuite Elijah Newren
2010-10-03 19:59 ` [PATCHv6 01/16] test-lib: make test_expect_code a test command Elijah Newren
2010-10-04 0:54 ` Junio C Hamano
2010-10-04 3:48 ` Ævar Arnfjörð Bjarmason
2010-10-04 3:50 ` Jonathan Nieder
2010-10-04 4:04 ` Ævar Arnfjörð Bjarmason
2010-10-04 4:06 ` Jonathan Nieder
2010-10-04 6:57 ` Ævar Arnfjörð Bjarmason
2010-10-04 9:28 ` Jonathan Nieder
2010-10-04 3:37 ` Ævar Arnfjörð Bjarmason
2010-10-03 20:00 ` [PATCHv6 02/16] t3020 (ls-files-error-unmatch): remove stray '1' from end of file Elijah Newren
2010-10-04 0:56 ` Junio C Hamano
2010-10-03 20:00 ` [PATCHv6 03/16] t4017 (diff-retval): replace manual exit code check with test_expect_code Elijah Newren
2010-10-03 20:00 ` [PATCHv6 04/16] t100[12] (read-tree-m-2way, read_tree_m_u_2way): add missing && Elijah Newren
2010-10-03 20:00 ` [PATCHv6 05/16] t4002 (diff-basic): use test_might_fail for commands that might fail Elijah Newren
2010-10-03 20:00 ` [PATCHv6 06/16] t4202 (log): Replace '<git-command> || :' with test_might_fail Elijah Newren
2010-10-03 20:00 ` [PATCHv6 07/16] t3600 (rm): add lots of missing && Elijah Newren
2010-10-03 20:56 ` Jonathan Nieder
2010-10-03 23:32 ` Junio C Hamano
2010-10-03 20:00 ` [PATCHv6 08/16] t4019 (diff-wserror): " Elijah Newren
2010-10-03 20:00 ` [PATCHv6 09/16] t4026 (color): remove unneeded and unchained command Elijah Newren
2010-10-03 20:00 ` [PATCHv6 10/16] t5602 (clone-remote-exec): add missing && Elijah Newren
2010-10-03 20:00 ` [PATCHv6 11/16] t6016 (rev-list-graph-simplify-history): " Elijah Newren
2010-10-03 20:00 ` [PATCHv6 12/16] t7001 (mv): " Elijah Newren
2010-10-03 20:00 ` [PATCHv6 13/16] t7601 (merge-pull-config): " Elijah Newren
2010-10-03 20:00 ` [PATCHv6 14/16] t7800 (difftool): " Elijah Newren
2010-10-03 20:00 ` [PATCHv6 15/16] Add missing &&'s throughout the testsuite Elijah Newren
2010-10-03 20:59 ` Jonathan Nieder
2010-10-03 21:17 ` Jonathan Nieder
2010-10-31 1:46 ` [PATCH en/cascade-tests] tests: add missing && Jonathan Nieder
2010-10-31 3:31 ` Junio C Hamano
2010-10-31 7:26 ` [PATCH/RFC 00/10] " Jonathan Nieder
2010-10-31 7:30 ` [PATCH 01/10] tests: add missing &&, batch 2 Jonathan Nieder
2010-10-31 7:33 ` [RFC/PATCH 02/10] test-lib: introduce test_line_count to measure files Jonathan Nieder
2010-11-09 22:56 ` Junio C Hamano
2010-11-09 23:09 ` Ævar Arnfjörð Bjarmason
2010-10-31 7:34 ` Jonathan Nieder [this message]
2010-10-31 7:35 ` [PATCH 04/10] t1502 (rev-parse --parseopt): test exit code from "-h" Jonathan Nieder
2010-10-31 7:36 ` [PATCH 05/10] t1400 (update-ref): use test_must_fail Jonathan Nieder
2010-10-31 7:36 ` [PATCH 06/10] t3301 (notes): use test_expect_code for clarity Jonathan Nieder
2010-10-31 7:38 ` [PATCH 07/10] t3404 (rebase -i): unroll test_commit loops Jonathan Nieder
2010-10-31 7:39 ` [PATCH 08/10] t3404 (rebase -i): move comment to description Jonathan Nieder
2010-11-17 23:12 ` Junio C Hamano
2010-10-31 7:40 ` [PATCH 09/10] t3404 (rebase -i): introduce helper to check position of HEAD Jonathan Nieder
2010-11-17 17:55 ` Junio C Hamano
2010-10-31 7:41 ` [PATCH 10/10] t4124 (apply --whitespace): use test_might_fail Jonathan Nieder
2010-11-09 22:25 ` [PATCH en/cascade-tests] tests: add missing && Junio C Hamano
2010-11-05 4:57 ` Elijah Newren
2010-10-03 20:00 ` [PATCHv6 16/16] Introduce portable_unset and use it to ensure proper && chaining Elijah Newren
2010-10-04 3:26 ` Ævar Arnfjörð Bjarmason
2010-10-04 4:44 ` Jonathan Nieder
2010-10-04 7:52 ` Junio C Hamano
2010-10-04 11:38 ` Jonathan Nieder
2010-10-03 21:09 ` [PATCHv6 00/16] Add missing &&'s in the testsuite Jonathan Nieder
2010-10-04 3:11 ` Ævar Arnfjörð Bjarmason
2010-10-04 3:44 ` Jonathan Nieder
2010-10-04 3:50 ` Ævar Arnfjörð Bjarmason
2010-10-04 12:28 ` yj2133011
2010-10-06 5:31 ` [TOY PATCH] test-lib: &&-chaining tester Jonathan Nieder
2010-10-06 8:09 ` Matthieu Moy
2010-10-06 8:25 ` Johannes Sixt
2010-10-06 8:52 ` Sverre Rabbelier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101031073444.GD11483@burratino \
--to=jrnieder@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).