From: Jonathan Nieder <jrnieder@gmail.com>
To: Johan Herland <johan@herland.net>
Cc: git@vger.kernel.org, bebarino@gmail.com, gitster@pobox.com,
avarab@gmail.com
Subject: Test script style (Re: [PATCH 08/18] git notes merge: Initial implementation handling trivial merges only)
Date: Wed, 6 Oct 2010 23:37:21 -0500 [thread overview]
Message-ID: <20101007043721.GD2285@burratino> (raw)
In-Reply-To: <1285719811-10871-9-git-send-email-johan@herland.net>
Johan Herland wrote:
> This initial implementation of 'git notes merge' only handles the trivial
> merge cases (i.e. where the merge is either a no-op, or a fast-forward).
Mm, sounds like a nice thing to have anyway.
Now to digress: some generalities about test scripts. This will
probably be very tedious. I'm writing it as groundwork before
reviewing your test (since I don't feel on solid ground about this
topic at all).
More focused thoughts on other aspects of the patch will follow in a
separate message.
First:
See http://thread.gmane.org/gmane.comp.version-control.git/155596/focus=155673
If you don't like what you see, no need to read the rest
of this message. :)
Motivation:
Not being the best of shell script readers (or writers,
for that matter), I need all the help from stylistic cues
I can get. Old test scripts have a consistent style
generally, but newer ones are starting to diverge from
one another.
A rough test format:
#!/bin/sh
#
# Copyright (c) 2010 ...
#
test_description='...
. ./test-lib.sh
. ...
constant data
function definitions
setup }
test }
test } repeat as necessary
test }
test_done
Test description:
test_description = 'One-line description
Some words or diagrams describing the invariants (e.g., history)
maintained between tests'
Constant data:
Simple commands to produce test vectors, expected output, and
other variables and files that it might be convenient to have
unchanged available throughout the test script.
Because not guarded by a test assertion, this section would
not include any git commands, nor any commands that might fail
or write to the terminal. So: this section might use
"cat <<\", "mkdir -p", "cp", "cp -R", "mv", "printf", "foo=",
"unset", and "export", but not much else.
Function definitions:
Tests can define functions inside a test_expect_success block,
too, but the generally useful functions would go up front with
the constant data.
Setup:
test_expect_success '(setup | set up) ...' '
Commands to set up for the next batch of tests.
Can rely on previous setup and can do just about
anything.
'
Tests:
test_expect_success|failure '... some claim...' '
Commands to test that claim.
Could do all sorts of things, as long as they do not
disturb the invariants established by the
constant_data and setup sections.
'
What is not present:
A test in this style would not include any commands except for
test_done outside a test assertion after the first
test_expect_success.
This is meant to be a sort of compromise between what t/README says
("Put all code inside test_expect_success and other assertions") and
what people actually do. I have no problem with people doing
something else --- in fact, some tests would not make any sense in
this style. In general, if a person is writing maintainable tests
that do not slow down "make test" by much, it does not make much sense
to put new obstacles in her way.
What I expect is that new tests would be easier to read and extend in
this style, since to get started, all a person has to pay attention to
are the setup commands. So a potential collaborator could say "if you
use this structure, it will make my life easier".
Thoughts? Would it make sense to eventually put something like this
in t/CodingStyle or nearby?
next prev parent reply other threads:[~2010-10-07 4:40 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-29 0:23 [PATCH 00/18] git notes merge Johan Herland
2010-09-29 0:23 ` [PATCH 01/18] (trivial) notes.h: Minor documentation fixes to copy_notes() Johan Herland
2010-10-05 14:55 ` Jonathan Nieder
2010-10-05 15:22 ` Johan Herland
2010-10-05 15:26 ` Jonathan Nieder
2010-09-29 0:23 ` [PATCH 02/18] notes.h: Make default_notes_ref() available in notes API Johan Herland
2010-09-29 0:23 ` [PATCH 03/18] notes.h/c: Clarify the handling of notes objects that are == null_sha1 Johan Herland
2010-10-05 15:21 ` Jonathan Nieder
2010-10-05 22:30 ` Johan Herland
2010-09-29 0:23 ` [PATCH 04/18] notes.h/c: Propagate combine_notes_fn return value to add_note() and beyond Johan Herland
2010-10-05 15:38 ` Jonathan Nieder
2010-10-06 19:40 ` Johan Herland
2010-09-29 0:23 ` [PATCH 05/18] (trivial) t3303: Indent with tabs instead of spaces for consistency Johan Herland
2010-09-29 0:23 ` [PATCH 06/18] notes.c: Use two newlines (instead of one) when concatenating notes Johan Herland
2010-09-29 0:23 ` [PATCH 07/18] builtin/notes.c: Split notes ref DWIMmery into a separate function Johan Herland
2010-10-05 15:50 ` Jonathan Nieder
2010-10-07 13:56 ` Johan Herland
2010-09-29 0:23 ` [PATCH 08/18] git notes merge: Initial implementation handling trivial merges only Johan Herland
2010-10-07 4:37 ` Jonathan Nieder [this message]
2010-10-07 4:57 ` Test script style (Re: [PATCH 08/18] git notes merge: Initial implementation handling trivial merges only) Junio C Hamano
2010-10-07 6:24 ` [PATCH 08/18] git notes merge: Initial implementation handling trivial merges only Jonathan Nieder
2010-10-08 23:55 ` Johan Herland
2010-10-09 17:29 ` Jonathan Nieder
2010-10-21 2:12 ` Johan Herland
2010-09-29 0:23 ` [PATCH 09/18] builtin/notes.c: Refactor creation of notes commits Johan Herland
2010-09-29 0:23 ` [PATCH 10/18] git notes merge: Handle real, non-conflicting notes merges Johan Herland
2010-09-29 16:20 ` Ævar Arnfjörð Bjarmason
2010-09-29 23:25 ` Johan Herland
2010-09-29 0:23 ` [PATCH 11/18] git notes merge: Add automatic conflict resolvers (ours, theirs, union) Johan Herland
2010-10-02 9:14 ` Stephen Boyd
2010-10-04 15:10 ` Johan Herland
2010-09-29 0:23 ` [PATCH 12/18] Documentation: Preliminary docs on 'git notes merge' Johan Herland
2010-10-02 8:55 ` Stephen Boyd
2010-10-04 15:15 ` Johan Herland
2010-09-29 0:23 ` [PATCH 13/18] git notes merge: Manual conflict resolution, part 1/2 Johan Herland
2010-09-29 0:23 ` [PATCH 14/18] git notes merge: Manual conflict resolution, part 2/2 Johan Herland
2010-09-29 16:19 ` Ævar Arnfjörð Bjarmason
2010-09-29 23:37 ` Johan Herland
2010-09-29 0:23 ` [PATCH 15/18] git notes merge: List conflicting notes in notes merge commit message Johan Herland
2010-09-29 0:23 ` [PATCH 16/18] git notes merge: --commit should fail if underlying notes ref has moved Johan Herland
2010-09-29 0:23 ` [PATCH 17/18] git notes merge: Add another auto-resolving strategy: "cat_sort_uniq" Johan Herland
2010-09-29 0:23 ` [PATCH 18/18] git notes merge: Add testcases for merging notes trees at different fanouts Johan Herland
2010-09-29 14:56 ` [PATCH 00/18] git notes merge Sverre Rabbelier
2010-09-29 15:16 ` Johan Herland
2010-09-29 15:20 ` Sverre Rabbelier
2010-09-29 16:04 ` Johan Herland
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=20101007043721.GD2285@burratino \
--to=jrnieder@gmail.com \
--cc=avarab@gmail.com \
--cc=bebarino@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johan@herland.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.