Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/t/README
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2020-03-27 20:55:09 +0300
committerJunio C Hamano <gitster@pobox.com>2020-03-29 18:39:40 +0300
commit7cc112dc95fd75ba230ad424de622c9d1c1a8b73 (patch)
treeda9f995b7d3a25caeadf3aa4bf5ffdd10d6c0374 /t/README
parent274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925 (diff)
t/README: suggest how to leave test early with failure
Over time, we added the support to our test framework to make it easy to leave a test early with failure, but it was not clearly documented in t/README to help developers writing new tests. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/README')
-rw-r--r--t/README35
1 files changed, 35 insertions, 0 deletions
diff --git a/t/README b/t/README
index 9afd61e3ca..fd2f7489a9 100644
--- a/t/README
+++ b/t/README
@@ -550,6 +550,41 @@ Here are the "do's:"
reports "ok" or "not ok" to the end user running the tests. Under
--verbose, they are shown to help debug the tests.
+ - Be careful when you loop
+
+ You may need to verify multiple things in a loop, but the
+ following does not work correctly:
+
+ test_expect_success 'test three things' '
+ for i in one two three
+ do
+ test_something "$i"
+ done &&
+ test_something_else
+ '
+
+ Because the status of the loop itself is the exit status of the
+ test_something in the last round, the loop does not fail when
+ "test_something" for "one" or "two" fails. This is not what you
+ want.
+
+ Instead, you can break out of the loop immediately when you see a
+ failure. Because all test_expect_* snippets are executed inside
+ a function, "return 1" can be used to fail the test immediately
+ upon a failure:
+
+ test_expect_success 'test three things' '
+ for i in one two three
+ do
+ test_something "$i" || return 1
+ done &&
+ test_something_else
+ '
+
+ Note that we still &&-chain the loop to propagate failures from
+ earlier commands.
+
+
And here are the "don'ts:"
- Don't exit() within a <script> part.