From: Jeff Hostetler <git@jeffhostetler.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Johannes.Schindelin@gmx.de,
Jeff Hostetler <jeffhost@microsoft.com>
Subject: Re: [PATCH v4 8/8] status: tests for --porcelain=v2
Date: Fri, 5 Aug 2016 14:31:38 -0400 [thread overview]
Message-ID: <57A4DB8A.6020407@jeffhostetler.com> (raw)
In-Reply-To: <xmqq1t23xeyb.fsf@gitster.mtv.corp.google.com>
On 08/05/2016 02:12 PM, Junio C Hamano wrote:
> Jeff Hostetler <git@jeffhostetler.com> writes:
>
>> +##################################################################
>> +## Confirm output prior to initial commit.
>> +##################################################################
>> +
>> +test_expect_success pre_initial_commit_0 '
>
> Bikeshedding, but our codebase seems to prefer "expect" vs "actual".
>
> $ git grep -e 'test_cmp expect ' t/ | wc -l
> 1882
> $ git grep -e 'test_cmp expected ' t/ | wc -l
> 888
>
>> + cat >expected <<-EOF &&
>> + # branch.oid (initial)
>> + # branch.head master
>> + ? actual
>> + ? dir1/
>> + ? expected
>> + ? file_x
>> + ? file_y
>> + ? file_z
>> + EOF
>
> Perhaps throw these two entries to .gitignore to allow new tests in
> the future could also use expect.1 vs actual.1 and somesuch?
>
> cat >.gitignore <<-\EOF &&
> expect*
> actual*
> EOF
>
>> +test_expect_success pre_initial_commit_1 '
>> + git add file_x file_y file_z dir1 &&
>> + SHA_A=`git hash-object -t blob -- dir1/file_a` &&
>> + SHA_B=`git hash-object -t blob -- dir1/file_b` &&
>> + SHA_X=`git hash-object -t blob -- file_x` &&
>> + SHA_Y=`git hash-object -t blob -- file_y` &&
>> + SHA_Z=`git hash-object -t blob -- file_z` &&
>
> Please use $(commannd) instead of `command`. Also "SHA" is probably
> a bad prefix; either use "SHA_1" to be technically correct, or
> better yet use "OID", as we are moving towards abstracting the exact
> hash function name away.
>
>> + SHA_ZERO=0000000000000000000000000000000000000000 &&
>
> I think we made $_z40 available to you from t/test-lib.sh.
>
>> +## Try -z on the above
>> +test_expect_success pre_initial_commit_2 '
>> + cat >expected.lf <<-EOF &&
>> + # branch.oid (initial)
>> + # branch.head master
>> + 1 A. N... 000000 100644 100644 $SHA_ZERO $SHA_A dir1/file_a
>> + 1 A. N... 000000 100644 100644 $SHA_ZERO $SHA_B dir1/file_b
>> + 1 A. N... 000000 100644 100644 $SHA_ZERO $SHA_X file_x
>> + 1 A. N... 000000 100644 100644 $SHA_ZERO $SHA_Y file_y
>> + 1 A. N... 000000 100644 100644 $SHA_ZERO $SHA_Z file_z
>> + ? actual
>> + ? expected
>> + EOF
>> + perl -pe y/\\012/\\000/ <expected.lf >expected &&
>> + rm expected.lf &&
>
> As you immediately remove expected.lf, the first "cat" process is
> rather pointless. You can redirect here text <<-EOF directly into
> perl instead. Also it would probably help to add a new helper
> "lf_to_nul" in t/test-lib-functions.sh around the place where
> nul_to_q, ..., tz_to_tab_space helpers are defined, which would
> allow us to say
>
> lf_to_nul >expect <<-EOF &&
> ...
> EOF
>
>> +test_expect_success initial_commit_3 '
>> + git mv file_y renamed_y &&
>> + H0=`git rev-parse HEAD` &&
>> +
>> + cat >expected.q <<-EOF &&
>> + # branch.oid $H0
>> + # branch.head master
>> + 1 M. N... 100644 100644 100644 $SHA_X $SHA_X1 file_x
>> + 1 D. N... 100644 000000 000000 $SHA_Z $SHA_ZERO file_z
>> + 2 R. N... 100644 100644 100644 $SHA_Y $SHA_Y R100 renamed_yQfile_y
>> + ? actual
>> + ? expected
>> + EOF
>> + q_to_tab <expected.q >expected &&
>> + rm expected.q &&
>
> The same comment applies (redirect directly into q_to_tab).
>
>> +##################################################################
>> +## Ignore a file
>> +##################################################################
>> +
>> +test_expect_success ignore_file_0 '
>> + echo x.ign >.gitignore &&
>> + echo "ignore me" >x.ign &&
>> + H1=`git rev-parse HEAD` &&
>> +
>> + cat >expected <<-EOF &&
>> + # branch.oid $H1
>> + # branch.head master
>> + ? .gitignore
>> + ? actual
>> + ? expected
>> + ! x.ign
>> + EOF
>> +
>> + git status --porcelain=v2 --branch --ignored --untracked-files=all >actual &&
>> + rm x.ign &&
>> + rm .gitignore &&
>> + test_cmp expected actual
>> +'
>
> You do not seem to be checking a feature is not triggered when not
> asked throughout this test, e.g. making sure the output does not
> have the "# branch.*" lines when --branch is not given, "! x.ign"
> is not shown when --ignored is not given, etc.
>
>> +##################################################################
>> +## Test upstream fields in branch header
>> +##################################################################
>> +
>> +test_expect_success 'upstream_fields_0' '
>> + git checkout master &&
>> + git clone . sub_repo &&
>> + (
>> + ## Confirm local master tracks remote master.
>> + cd sub_repo &&
>> + HUF=`git rev-parse HEAD` &&
>> + ...
>> + git status --porcelain=v2 --branch --ignored --untracked-files=all >actual &&
>> + test_cmp expected actual
>> + ) &&
>> + rm -rf sub_repo
>
> It probably is a good idea to use test_when_finished immediately
> before "git clone . sub_repo" to arrange this to happen even when
> any test in the subshell fails.
>
Lots of good points here (and on the earlier commits in this
series). I'll address and send up a new version shortly.
Thanks!
Jeff
next prev parent reply other threads:[~2016-08-05 18:33 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-02 14:12 [PATCH v4 0/8] status: V2 porcelain status Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 1/8] status: rename long-format print routines Jeff Hostetler
2016-08-03 21:28 ` Junio C Hamano
2016-08-04 12:30 ` Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 2/8] status: cleanup API to wt_status_print Jeff Hostetler
2016-08-03 21:36 ` Junio C Hamano
2016-08-04 12:35 ` Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 3/8] status: support --porcelain[=<version>] Jeff Hostetler
2016-08-03 21:37 ` Junio C Hamano
2016-08-02 14:12 ` [PATCH v4 4/8] status: per-file data collection for --porcelain=v2 Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 5/8] status: print per-file porcelain v2 status data Jeff Hostetler
2016-08-05 21:02 ` Jeff King
2016-08-05 21:09 ` Junio C Hamano
2016-08-05 21:14 ` Jeff King
2016-08-05 21:21 ` Junio C Hamano
2016-08-05 21:43 ` Stefan Beller
2016-08-05 21:47 ` Stefan Beller
2016-08-05 21:27 ` Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 6/8] status: print branch info with --porcelain=v2 --branch Jeff Hostetler
2016-08-05 17:01 ` Junio C Hamano
2016-08-05 18:11 ` Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 7/8] git-status.txt: describe --porcelain=v2 format Jeff Hostetler
2016-08-05 17:50 ` Junio C Hamano
2016-08-05 18:27 ` Jeff Hostetler
2016-08-02 14:12 ` [PATCH v4 8/8] status: tests for --porcelain=v2 Jeff Hostetler
2016-08-05 18:12 ` Junio C Hamano
2016-08-05 18:31 ` Jeff Hostetler [this message]
2016-08-03 15:09 ` [PATCH v4 0/8] status: V2 porcelain status Johannes Schindelin
2016-08-03 15:23 ` Junio C Hamano
2016-08-03 16:10 ` Johannes Schindelin
2016-08-03 16:59 ` Junio C Hamano
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=57A4DB8A.6020407@jeffhostetler.com \
--to=git@jeffhostetler.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jeffhost@microsoft.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 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.