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: [RFC/PATCH 02/10] test-lib: introduce test_line_count to measure files
Date: Sun, 31 Oct 2010 02:33:50 -0500 [thread overview]
Message-ID: <20101031073350.GC11483@burratino> (raw)
In-Reply-To: <20101031072640.GA11483@burratino>
Some tests check their output with code like the following:
test "$(git ls-files -u B | wc -l)" -eq 3 || {
echo "BAD: should have left stages for B"
return 1
}
The verbose failure condition is used because test, unlike
diff, does not print any useful information about the
nature of the failure when it fails.
Introduce a test_line_count function to help. If used like
git ls-files -u B >output &&
test_line_count -eq 3 output
it will produce output like
test_line_count: line count for output !-eq 3
100644 b023018cabc396e7692c70bbf5784a93d3f738ab 2 hi.c
100644 45b983be36b73c0788dc9cbcb76cbb80fc7bb057 3 hi.c
on failure.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
I don't imagine this would be too helpful for new tests,
but the idiom is common enough in old tests that maybe I'm
wrong about that.
t/README | 4 ++++
t/test-lib.sh | 22 ++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/t/README b/t/README
index 2aceb67..1a78982 100644
--- a/t/README
+++ b/t/README
@@ -500,6 +500,10 @@ library for your script to use.
<expected> file. This behaves like "cmp" but produces more
helpful output when the test is run with "-v" option.
+ - test_line_count (= | -lt | -ge | ...) <length> <file>
+
+ Check whether a file has the length it is expected to.
+
- test_path_is_file <file> [<diagnosis>]
test_path_is_dir <dir> [<diagnosis>]
test_path_is_missing <path> [<diagnosis>]
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 87308f5..a417bdf 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -598,6 +598,28 @@ test_path_is_missing () {
fi
}
+# test_line_count checks that a file has the number of lines it
+# ought to. For example:
+#
+# test_expect_success 'produce exactly one line of output' '
+# do something >output &&
+# test_line_count = 1 output
+# '
+#
+# is like "test $(wc -l <output) = 1" except that it passes the
+# output through when the number of lines is wrong.
+
+test_line_count () {
+ if test $# != 3
+ then
+ error "bug in the test script: not 3 parameters to test_line_count"
+ elif ! test $(wc -l <"$3") "$1" "$2"
+ then
+ echo "test_line_count: line count for $3 !$1 $2"
+ cat "$3"
+ return 1
+ fi
+}
# This is not among top-level (test_expect_success | test_expect_failure)
# but is a prefix that can be used in the test script, like:
--
1.7.2.3.557.gab647.dirty
next prev parent reply other threads:[~2010-10-31 7:34 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 ` Jonathan Nieder [this message]
2010-11-09 22:56 ` [RFC/PATCH 02/10] test-lib: introduce test_line_count to measure files Junio C Hamano
2010-11-09 23:09 ` Ævar Arnfjörð Bjarmason
2010-10-31 7:34 ` [PATCH 03/10] t6022 (renaming merge): chain test commands with && Jonathan Nieder
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=20101031073350.GC11483@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).