* [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
@ 2008-02-29 22:23 Mike Hommey
2008-02-29 22:53 ` Jeff King
2008-02-29 23:34 ` Johannes Schindelin
0 siblings, 2 replies; 12+ messages in thread
From: Mike Hommey @ 2008-02-29 22:23 UTC (permalink / raw)
To: git, gitster
Signed-off-by: Mike Hommey <mh@glandium.org>
---
t/t6024-recursive-merge.sh | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/t/t6024-recursive-merge.sh b/t/t6024-recursive-merge.sh
index 149ea85..43b5f15 100755
--- a/t/t6024-recursive-merge.sh
+++ b/t/t6024-recursive-merge.sh
@@ -81,7 +81,7 @@ EOF
test_expect_success "virtual trees were processed" "git diff expect out"
-git reset --hard
+git reset --hard >&3 2>&4
test_expect_success 'refuse to merge binary files' '
printf "\0" > binary-file &&
git add binary-file &&
--
1.5.4.3.340.g97b97.dirty
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 22:23 [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely Mike Hommey
@ 2008-02-29 22:53 ` Jeff King
2008-02-29 22:58 ` Mike Hommey
2008-02-29 23:34 ` Johannes Schindelin
1 sibling, 1 reply; 12+ messages in thread
From: Jeff King @ 2008-02-29 22:53 UTC (permalink / raw)
To: Mike Hommey; +Cc: git, gitster
On Fri, Feb 29, 2008 at 11:23:25PM +0100, Mike Hommey wrote:
> test_expect_success "virtual trees were processed" "git diff expect out"
>
> -git reset --hard
> +git reset --hard >&3 2>&4
> test_expect_success 'refuse to merge binary files' '
> printf "\0" > binary-file &&
> git add binary-file &&
Should this perhaps just be:
test_expect_success 'reset state' 'git reset --hard'
?
-Peff
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 22:53 ` Jeff King
@ 2008-02-29 22:58 ` Mike Hommey
2008-02-29 23:01 ` Jeff King
2008-02-29 23:15 ` Junio C Hamano
0 siblings, 2 replies; 12+ messages in thread
From: Mike Hommey @ 2008-02-29 22:58 UTC (permalink / raw)
To: Jeff King; +Cc: git, gitster
On Fri, Feb 29, 2008 at 05:53:31PM -0500, Jeff King wrote:
> On Fri, Feb 29, 2008 at 11:23:25PM +0100, Mike Hommey wrote:
>
> > test_expect_success "virtual trees were processed" "git diff expect out"
> >
> > -git reset --hard
> > +git reset --hard >&3 2>&4
> > test_expect_success 'refuse to merge binary files' '
> > printf "\0" > binary-file &&
> > git add binary-file &&
>
> Should this perhaps just be:
>
> test_expect_success 'reset state' 'git reset --hard'
Is it really about testing git reset ?
Mike
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 22:58 ` Mike Hommey
@ 2008-02-29 23:01 ` Jeff King
2008-02-29 23:15 ` Junio C Hamano
1 sibling, 0 replies; 12+ messages in thread
From: Jeff King @ 2008-02-29 23:01 UTC (permalink / raw)
To: Mike Hommey; +Cc: git, gitster
On Fri, Feb 29, 2008 at 11:58:16PM +0100, Mike Hommey wrote:
> > > -git reset --hard
> > > +git reset --hard >&3 2>&4
> > > test_expect_success 'refuse to merge binary files' '
> > > printf "\0" > binary-file &&
> > > git add binary-file &&
> >
> > Should this perhaps just be:
> >
> > test_expect_success 'reset state' 'git reset --hard'
>
> Is it really about testing git reset ?
No, of course not. Nor is t0003 about testing 'setup'. But it is a
convention[1] in git tests to do everything inside a test_expect_success
wrapper, which is beneficial because:
- you get your output handled properly automagically :)
- if the setup step fails, we notice. Which means:
- it cannot silently cause a later test to succeed (e.g., setup
changes a file, then the real test reverts it)
- it is easier to debug failing tests, because you are notified
of the _first_ failure
-Peff
[1] By convention, I don't necessarily mean that there is a written
rule, nor that we always do it that way, but only that in my experience
we usually do. Somebody like Junio could say more definitely what is
preferred.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 22:58 ` Mike Hommey
2008-02-29 23:01 ` Jeff King
@ 2008-02-29 23:15 ` Junio C Hamano
2008-02-29 23:54 ` Jeff King
1 sibling, 1 reply; 12+ messages in thread
From: Junio C Hamano @ 2008-02-29 23:15 UTC (permalink / raw)
To: Mike Hommey; +Cc: Jeff King, git, gitster
Mike Hommey <mh@glandium.org> writes:
> On Fri, Feb 29, 2008 at 05:53:31PM -0500, Jeff King wrote:
>> On Fri, Feb 29, 2008 at 11:23:25PM +0100, Mike Hommey wrote:
>>
>> > test_expect_success "virtual trees were processed" "git diff expect out"
>> >
>> > -git reset --hard
>> > +git reset --hard >&3 2>&4
>> > test_expect_success 'refuse to merge binary files' '
>> > printf "\0" > binary-file &&
>> > git add binary-file &&
>>
>> Should this perhaps just be:
>>
>> test_expect_success 'reset state' 'git reset --hard'
>
> Is it really about testing git reset ?
No, it is about setting the stage to perform the test in
question, so it belongs inside.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 22:23 [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely Mike Hommey
2008-02-29 22:53 ` Jeff King
@ 2008-02-29 23:34 ` Johannes Schindelin
2008-02-29 23:50 ` Junio C Hamano
1 sibling, 1 reply; 12+ messages in thread
From: Johannes Schindelin @ 2008-02-29 23:34 UTC (permalink / raw)
To: Mike Hommey; +Cc: git, gitster
Hi,
On Fri, 29 Feb 2008, Mike Hommey wrote:
> diff --git a/t/t6024-recursive-merge.sh b/t/t6024-recursive-merge.sh
> index 149ea85..43b5f15 100755
> --- a/t/t6024-recursive-merge.sh
> +++ b/t/t6024-recursive-merge.sh
> @@ -81,7 +81,7 @@ EOF
>
> test_expect_success "virtual trees were processed" "git diff expect out"
>
> -git reset --hard
> +git reset --hard >&3 2>&4
> test_expect_success 'refuse to merge binary files' '
Would it not be _much_ more sensible to pull that command _into_ the
test_expect_success?
Ciao,
Dscho
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 23:34 ` Johannes Schindelin
@ 2008-02-29 23:50 ` Junio C Hamano
2008-03-01 4:10 ` Jeff King
0 siblings, 1 reply; 12+ messages in thread
From: Junio C Hamano @ 2008-02-29 23:50 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Mike Hommey, git, gitster
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Hi,
>
> On Fri, 29 Feb 2008, Mike Hommey wrote:
>
>> diff --git a/t/t6024-recursive-merge.sh b/t/t6024-recursive-merge.sh
>> index 149ea85..43b5f15 100755
>> --- a/t/t6024-recursive-merge.sh
>> +++ b/t/t6024-recursive-merge.sh
>> @@ -81,7 +81,7 @@ EOF
>>
>> test_expect_success "virtual trees were processed" "git diff expect out"
>>
>> -git reset --hard
>> +git reset --hard >&3 2>&4
>> test_expect_success 'refuse to merge binary files' '
>
> Would it not be _much_ more sensible to pull that command _into_ the
> test_expect_success?
Actually, I think this might be a bit more sensible approach.
-- >8 --
tests: allow optional clean-up phrase to expect_success/failure
When one test modifies the state of the test repository that the later
tests may depend on, you may want to add a clean-up action that is run
regardless of the outcome of the main part of the test.
This can now be specified as the third parameter to test_expect_success
and test_expect_failure functions.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/README | 13 +++++++++++--
t/t6024-recursive-merge.sh | 5 +++--
t/test-lib.sh | 32 ++++++++++++++++++++++++--------
3 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/t/README b/t/README
index 73ed11b..de79c00 100644
--- a/t/README
+++ b/t/README
@@ -146,7 +146,7 @@ Test harness library
There are a handful helper functions defined in the test harness
library for your script to use.
- - test_expect_success <message> <script>
+ - test_expect_success <message> <script> [<cleanup>]
This takes two strings as parameter, and evaluates the
<script>. If it yields success, test is considered
@@ -158,7 +158,12 @@ library for your script to use.
'git-write-tree should be able to write an empty tree.' \
'tree=$(git-write-tree)'
- - test_expect_failure <message> <script>
+ An optional <cleanup> is executed and can be used to clean-up
+ the state this test modifies (or leaves half-modified when it
+ fails). The clean-up script is not run if test fails and the
+ test script is run under --immediate mode to help postmortem.
+
+ - test_expect_failure <message> <script> [<cleanup>]
This is NOT the opposite of test_expect_success, but is used
to mark a test that demonstrates a known breakage. Unlike
@@ -167,6 +172,10 @@ library for your script to use.
success and "still broken" on failure. Failures from these
tests won't cause -i (immediate) to stop.
+ An optional <cleanup> is executed and can be used to clean-up
+ the state this test modifies (or leaves half-modified when it
+ fails).
+
- test_debug <script>
This takes a single argument, <script>, and evaluates it only
diff --git a/t/t6024-recursive-merge.sh b/t/t6024-recursive-merge.sh
index 149ea85..ae9706f 100755
--- a/t/t6024-recursive-merge.sh
+++ b/t/t6024-recursive-merge.sh
@@ -79,9 +79,10 @@ cat > expect << EOF
100644 fd7923529855d0b274795ae3349c5e0438333979 3 a1
EOF
-test_expect_success "virtual trees were processed" "git diff expect out"
+test_expect_success "virtual trees were processed" "
+ git diff expect out
+" 'git reset --hard'
-git reset --hard
test_expect_success 'refuse to merge binary files' '
printf "\0" > binary-file &&
git add binary-file &&
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 68efda4..0fb2c98 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -220,9 +220,13 @@ test_skip () {
}
test_expect_failure () {
- test "$#" = 2 ||
- error "bug in the test script: not 2 parameters to test-expect-failure"
- if ! test_skip "$@"
+ case $# in
+ 2) ;; # traditional
+ 3) ;; # with clean-up
+ *)
+ error "bug in the test script" ;;
+ esac
+ if ! test_skip "$1" "$2"
then
say >&3 "checking known breakage: $2"
test_run_ "$2"
@@ -230,16 +234,24 @@ test_expect_failure () {
then
test_known_broken_ok_ "$1"
else
- test_known_broken_failure_ "$1"
+ test_known_broken_failure_ "$1"
+ fi
+ if test -n "$3"
+ then
+ eval >&3 2>&4 "$3"
fi
fi
echo >&3 ""
}
test_expect_success () {
- test "$#" = 2 ||
- error "bug in the test script: not 2 parameters to test-expect-success"
- if ! test_skip "$@"
+ case $# in
+ 2) ;; # traditional
+ 3) ;; # with clean-up
+ *)
+ error "bug in the test script" ;;
+ esac
+ if ! test_skip "$1" "$2"
then
say >&3 "expecting success: $2"
test_run_ "$2"
@@ -247,7 +259,11 @@ test_expect_success () {
then
test_ok_ "$1"
else
- test_failure_ "$@"
+ test_failure_ "$1" "$2"
+ fi
+ if test -n "$3"
+ then
+ eval >&3 2>&4 "$3"
fi
fi
echo >&3 ""
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 23:15 ` Junio C Hamano
@ 2008-02-29 23:54 ` Jeff King
0 siblings, 0 replies; 12+ messages in thread
From: Jeff King @ 2008-02-29 23:54 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Mike Hommey, git
On Fri, Feb 29, 2008 at 03:15:32PM -0800, Junio C Hamano wrote:
> >> > test_expect_success 'refuse to merge binary files' '
> >> > printf "\0" > binary-file &&
> >> > git add binary-file &&
> >>
> >> Should this perhaps just be:
> >>
> >> test_expect_success 'reset state' 'git reset --hard'
> >
> > Is it really about testing git reset ?
>
> No, it is about setting the stage to perform the test in
> question, so it belongs inside.
That sounds reasonable to me.
-Peff
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-02-29 23:50 ` Junio C Hamano
@ 2008-03-01 4:10 ` Jeff King
2008-03-01 4:27 ` Shawn O. Pearce
0 siblings, 1 reply; 12+ messages in thread
From: Jeff King @ 2008-03-01 4:10 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Johannes Schindelin, Mike Hommey, git
On Fri, Feb 29, 2008 at 03:50:03PM -0800, Junio C Hamano wrote:
> Actually, I think this might be a bit more sensible approach.
>
> -- >8 --
> tests: allow optional clean-up phrase to expect_success/failure
>
> When one test modifies the state of the test repository that the later
> tests may depend on, you may want to add a clean-up action that is run
> regardless of the outcome of the main part of the test.
>
> This can now be specified as the third parameter to test_expect_success
> and test_expect_failure functions.
I think your heart is in the right place with this patch, but I doubt
that it is going to be all that productive in practice. Most tests
consist of a long list of commands, and cleaning up properly after every
possible failure case is going to be a lot of work. And worse, since the
tests generally _don't_ fail, you have no way to test that your cleanup
is reasonable.
So I think we will end up in the case where a few failed tests will
properly clean themselves up and let further tests proceed, but most
failures will leave a big question. In other words, what problem have we
solved? If tests N and N+k both fail, would you, even with this patch,
suspect N+k of actually failing, or would you first go and debug test N?
Is that any different than what you do now?
-Peff
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-03-01 4:10 ` Jeff King
@ 2008-03-01 4:27 ` Shawn O. Pearce
2008-03-01 4:28 ` Jeff King
0 siblings, 1 reply; 12+ messages in thread
From: Shawn O. Pearce @ 2008-03-01 4:27 UTC (permalink / raw)
To: Jeff King; +Cc: Junio C Hamano, Johannes Schindelin, Mike Hommey, git
Jeff King <peff@peff.net> wrote:
> On Fri, Feb 29, 2008 at 03:50:03PM -0800, Junio C Hamano wrote:
>
> > Actually, I think this might be a bit more sensible approach.
> >
> > -- >8 --
> > tests: allow optional clean-up phrase to expect_success/failure
> >
> > When one test modifies the state of the test repository that the later
> > tests may depend on, you may want to add a clean-up action that is run
> > regardless of the outcome of the main part of the test.
>
> I think your heart is in the right place with this patch, but I doubt
> that it is going to be all that productive in practice. Most tests
> consist of a long list of commands, and cleaning up properly after every
> possible failure case is going to be a lot of work. And worse, since the
> tests generally _don't_ fail, you have no way to test that your cleanup
> is reasonable.
>
> So I think we will end up in the case where a few failed tests will
> properly clean themselves up and let further tests proceed, but most
> failures will leave a big question. In other words, what problem have we
> solved? If tests N and N+k both fail, would you, even with this patch,
> suspect N+k of actually failing, or would you first go and debug test N?
> Is that any different than what you do now?
I agree with Jeff. It is unnecessary complexity that won't be
tested well enough to be worthwhile.
This is why when tests start to fail I just rerun the specific case
with "-i -v" and let the test stop on the first failure, *fix that
one case* and run again to see if anything else is going to barf.
--
Shawn.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-03-01 4:27 ` Shawn O. Pearce
@ 2008-03-01 4:28 ` Jeff King
2008-03-01 5:40 ` Junio C Hamano
0 siblings, 1 reply; 12+ messages in thread
From: Jeff King @ 2008-03-01 4:28 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: Junio C Hamano, Johannes Schindelin, Mike Hommey, git
On Fri, Feb 29, 2008 at 11:27:39PM -0500, Shawn O. Pearce wrote:
> This is why when tests start to fail I just rerun the specific case
> with "-i -v" and let the test stop on the first failure, *fix that
> one case* and run again to see if anything else is going to barf.
Yes, exactly. I assumed that everyone did that.
-Peff
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely
2008-03-01 4:28 ` Jeff King
@ 2008-03-01 5:40 ` Junio C Hamano
0 siblings, 0 replies; 12+ messages in thread
From: Junio C Hamano @ 2008-03-01 5:40 UTC (permalink / raw)
To: Jeff King; +Cc: Shawn O. Pearce, Johannes Schindelin, Mike Hommey, git
Jeff King <peff@peff.net> writes:
> On Fri, Feb 29, 2008 at 11:27:39PM -0500, Shawn O. Pearce wrote:
>
>> This is why when tests start to fail I just rerun the specific case
>> with "-i -v" and let the test stop on the first failure, *fix that
>> one case* and run again to see if anything else is going to barf.
>
> Yes, exactly. I assumed that everyone did that.
Likewise.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-03-01 5:41 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-29 22:23 [PATCH] t6024-recursive-merge.sh: hide spurious output when not running verbosely Mike Hommey
2008-02-29 22:53 ` Jeff King
2008-02-29 22:58 ` Mike Hommey
2008-02-29 23:01 ` Jeff King
2008-02-29 23:15 ` Junio C Hamano
2008-02-29 23:54 ` Jeff King
2008-02-29 23:34 ` Johannes Schindelin
2008-02-29 23:50 ` Junio C Hamano
2008-03-01 4:10 ` Jeff King
2008-03-01 4:27 ` Shawn O. Pearce
2008-03-01 4:28 ` Jeff King
2008-03-01 5:40 ` Junio C Hamano
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).