From: Jeff King <peff@peff.net>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH 2/3] t5304: use helper to report failure of "test foo = bar"
Date: Fri, 10 Oct 2014 02:11:14 -0400 [thread overview]
Message-ID: <20141010061114.GB15277@peff.net> (raw)
In-Reply-To: <20141010060636.GA15057@peff.net>
For small outputs, we sometimes use:
test "$(some_cmd)" = "something we expect"
instead of a full test_cmp. The downside of this is that
when it fails, there is no output at all from the script.
Let's introduce a small helper to make tests easier to
debug.
Signed-off-by: Jeff King <peff@peff.net>
---
I kind of like the elegance of this, but I'd also be OK with dropping
it. The solution from the third patch does the same thing. And while the
output isn't quite as nice, it magically works for all existing tests,
without having to convert them to use verbose().
I wondered if there was any problem with defining a function with the
same name as a variable ($verbose). A few weeks ago, I would have said
they were completely different namespaces, but after seeing the
shellshock vulnerability I am not so sure. :) This seems to work fine
in bash and dash, but maybe there is some more obscure shell that would
not like it?
Technically this function is the opposite of test_must_fail. We could
call it test_must_succeed, but that is a little wordy for my taste (I
actually considered calling it just v() if we are going to use it a
lot, but that may be going too far).
t/t5304-prune.sh | 16 ++++++++--------
t/test-lib-functions.sh | 9 +++++++++
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index b0ffb05..e32e46d 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -13,7 +13,7 @@ add_blob() {
before=$(git count-objects | sed "s/ .*//") &&
BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
- test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+ verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
test_path_is_file $BLOB_FILE &&
test-chmtime =+0 $BLOB_FILE
}
@@ -45,11 +45,11 @@ test_expect_success 'prune --expire' '
add_blob &&
git prune --expire=1.hour.ago &&
- test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+ verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
test_path_is_file $BLOB_FILE &&
test-chmtime =-86500 $BLOB_FILE &&
git prune --expire 1.day &&
- test $before = $(git count-objects | sed "s/ .*//") &&
+ verbose test $before = $(git count-objects | sed "s/ .*//") &&
test_path_is_missing $BLOB_FILE
'
@@ -59,11 +59,11 @@ test_expect_success 'gc: implicit prune --expire' '
add_blob &&
test-chmtime =-$((2*$week-30)) $BLOB_FILE &&
git gc &&
- test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+ verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
test_path_is_file $BLOB_FILE &&
test-chmtime =-$((2*$week+1)) $BLOB_FILE &&
git gc &&
- test $before = $(git count-objects | sed "s/ .*//") &&
+ verbose test $before = $(git count-objects | sed "s/ .*//") &&
test_path_is_missing $BLOB_FILE
'
@@ -144,7 +144,7 @@ test_expect_success 'gc --no-prune' '
test-chmtime =-$((5001*$day)) $BLOB_FILE &&
git config gc.pruneExpire 2.days.ago &&
git gc --no-prune &&
- test 1 = $(git count-objects | sed "s/ .*//") &&
+ verbose test 1 = $(git count-objects | sed "s/ .*//") &&
test_path_is_file $BLOB_FILE
'
@@ -209,10 +209,10 @@ test_expect_success 'gc: prune old objects after local clone' '
git clone --no-hardlinks . aclone &&
(
cd aclone &&
- test 1 = $(git count-objects | sed "s/ .*//") &&
+ verbose test 1 = $(git count-objects | sed "s/ .*//") &&
test_path_is_file $BLOB_FILE &&
git gc --prune &&
- test 0 = $(git count-objects | sed "s/ .*//") &&
+ verbose test 0 = $(git count-objects | sed "s/ .*//") &&
test_path_is_missing $BLOB_FILE
)
'
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index dafd6ad..b7957b8 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -634,6 +634,15 @@ test_cmp_bin() {
cmp "$@"
}
+# Call any command "$@" but be more verbose about its
+# failure. This is handy for commands like "test" which do
+# not output anything when they fail.
+verbose () {
+ "$@" && return 0
+ echo >&2 "command failed: $(git rev-parse --sq-quote "$@")"
+ return 1
+}
+
# Check if the file expected to be empty is indeed empty, and barfs
# otherwise.
--
2.1.2.596.g7379948
next prev parent reply other threads:[~2014-10-10 6:11 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 ` Jeff King [this message]
2014-10-13 16:10 ` [PATCH 2/3] t5304: use helper to report failure of "test foo = bar" 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
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=20141010061114.GB15277@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mhagger@alum.mit.edu \
/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).