All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: Jeff King <peff@peff.net>, Git Mailing List <git@vger.kernel.org>,
	Michael Haggerty <mhagger@alum.mit.edu>
Subject: Re: [PATCH 2/3] t5304: use helper to report failure of "test foo = bar"
Date: Mon, 13 Oct 2014 14:56:18 -0700	[thread overview]
Message-ID: <xmqqppdv1vnh.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20141013213808.GB32245@google.com> (Jonathan Nieder's message of "Mon, 13 Oct 2014 14:38:08 -0700")

Jonathan Nieder <jrnieder@gmail.com> writes:

> Junio C Hamano wrote:
>> On Mon, Oct 13, 2014 at 2:31 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
>
>>> It could segfault after producing the good output, but sure,
>>> count-objects code doesn't change very often.
>>
>> "Doesn't change very often" is not the issue. Here we are not testing
>> if it can count correctly without crashing, which *is* the real reason
>> why it is perfectly fine to use $(git count-objects | sed ...) pattern here.
>>
>> There of course should be a test for count-objects to make sure it
>> counts correctly without crashing.
>
> That also makes sense, but it is a pretty big change from the general
> strategy used in git tests today.

I would have to say that you are mistaken in reading what the
"strategy used today" is.  There is a subtle trade-off involved.

When we test, say, "git add a b", we may want to test these things:

    - "git add" when given addable paths a and b finishes without
      crashing;

    - "git add" will leave these paths in the index as expected.

And we write

	git add a b &&
	test_write_lines a b >expect &&
        git ls-files a b >actual &&
        test_cmp expect actual

NOT because we expect "printf" (which underlies test_write_lines) or
"git ls-files" could somehow misbehave and dump core, but primarily
because compared to an alternative, e.g.

	git add a b || return 1
        test_write_lines a b >expect
        git ls-files a b >actual
        test_cmp expect actual

it is far cleaner and easier to read with a rhythm.  It is just an
added bonus that we may catch errors due to filesystem quota when
writing to "expect" or ls-files crashing.  If the alternative had
enough advantage over the established pattern (and here is where the
trade off comes in---you need a certain taste to judge the
advantage), it is perfectly fine to trade the exit value off and
favor the advantage the alternative offers (e.g. a test that is
easier to read).

Between these two, it is very sensible to take A. over B.

    A.
	git create-garbage &&
	test $(git count-objects | sed ... | wc -l) = 0

    B.
	git create-garbage &&
	test_when_finished "rm -f tmp" &&
        git count-objects >tmp &&
        test $(sed ... tmp | wc -l) = 0

It will shift the trade-off if the more verbose alternative gets
wrapped into a helper that is well constructed, though, because
readability advantage of A over B melts away when we do so.

  reply	other threads:[~2014-10-13 21:56 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-10  6:06 [PATCH 0/3] "-x" tracing option for tests Jeff King
2014-10-10  6:07 ` [PATCH 1/3] t5304: use test_path_is_* instead of "test -f" Jeff King
2014-10-10  6:11 ` [PATCH 2/3] t5304: use helper to report failure of "test foo = bar" Jeff King
2014-10-13 16:10   ` Jonathan Nieder
2014-10-13 21:15     ` Jeff King
2014-10-13 21:31       ` Jonathan Nieder
2014-10-13 21:33         ` Junio C Hamano
2014-10-13 21:38           ` Jonathan Nieder
2014-10-13 21:56             ` Junio C Hamano [this message]
2014-10-13 21:36         ` Jeff King
2014-10-10  6:13 ` [PATCH 3/3] test-lib.sh: support -x option for shell-tracing Jeff King
2014-10-10  6:21   ` Jeff King
2014-10-10  6:47     ` [PATCH v2 " Jeff King
2014-10-13 18:43       ` Junio C Hamano
2014-10-13 22:22       ` Junio C Hamano
2014-10-13 22:31         ` Junio C Hamano
2014-10-13 22:33         ` Jeff King
2014-10-13 22:38           ` Junio C Hamano
2014-10-13 22:43           ` Jeff King
2014-10-13 23:14             ` Junio C Hamano
2014-10-14  0:46               ` Jeff King
2014-10-10  6:27   ` [PATCH " Jeff King
2014-10-13 18:24 ` [PATCH 0/3] "-x" tracing option for tests Junio C Hamano
2014-10-13 21:07   ` Jeff King
2014-10-14  8:52     ` Michael Haggerty
2014-10-14 13:44       ` Jeff King

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=xmqqppdv1vnh.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=mhagger@alum.mit.edu \
    --cc=peff@peff.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.