From: Ævar Arnfjörð Bjarmason Date: Thu, 01 Jul 2010 20:17:50 GMT Subject: [PATCH v2 0/8] Improvements for t/README Message-ID: <1278015478-6920-1-git-send-email-avarab@gmail.com> This is v2 of the t/README series. It should address the concerns Junio and Jeff had about it. Jeff: - Keep the ./ way of running tests, but elaborate a bit in the commit message - Mention --root's effects on the trash directory location Junio: - The bit about ok/not ok moved out of the section on running tests. - Integrate a section that covers all the points in Junio's "Test your stuff" section, but does so as an itemized list, so it's easier to maintain it. Other: - Made it diff --check friendly. There's a diff against v1 of the series after this diffstat: Ævar Arnfjörð Bjarmason (8): t/README: Tests are all +x, ./test, not sh ./test t/README: The trash is in 't/trash directory.$name' t/README: Typo: paralell -> parallel t/README: Document the prereq functions, and 3-arg test_* t/README: Document test_external* t/README: Document test_expect_code t/README: Add a section about skipping tests t/README: Document the do's and don'ts of tests --- t/README | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 164 insertions(+), 8 deletions(-) diff --git a/t/README b/t/README index 29f795e..4a1cfc9 100644 --- a/t/README +++ b/t/README @@ -50,12 +50,6 @@ prove and other harnesses come with a lot of useful options. The # Repeat until no more failures $ prove -j 15 --state=failed,save ./t[0-9]*.sh -The TAP support is completely incidental. A TAP harness is just a -program that interprets the "ok"/"not ok" (and some other strings) in -a special way. The only limitation this imposes is that you shouldn't -echo "ok" or "not ok" by yourself at the beginning of a line, that'll -confuse the TAP harness. - You can also run each test individually from command line, like this: $ ./t3010-ls-files-killed-modified.sh @@ -229,14 +223,92 @@ This test harness library does the following things: - Creates an empty test directory with an empty .git/objects database and chdir(2) into it. This directory is 't/trash - directory.$test_name_without_dotsh' if you must know, but I do not - think you care. + directory.$test_name_without_dotsh', with t/ subject to change by + the --root option documented above. - Defines standard test helper functions for your scripts to use. These functions are designed to make all scripts behave consistently when command line arguments --verbose (or -v), --debug (or -d), and --immediate (or -i) is given. +Do's, don'ts & things to keep in mind +------------------------------------- + +Here's a few examples of things you probably should and shouldn't do +when writing tests. + +Do: + + - Put as much code as possible inside test_expect_success and other + assertions. + + Even code that isn't a test per se, but merely some setup code + should be inside a test assertion if at all possible. Test scripts + should only have trivial code outside of their assertions. + + - Chain your test assertions + + Write test code like this: + + git merge foo && + git push bar && + test ... + + Instead of: + + git merge hla + git push gh + test ... + + That way all of the commands in your tests will succeed or fail. If + you must ignore the return value of something (e.g. the return + value of export is unportable) it's best to indicate so explicitly + with a semicolon: + + export HLAGH; + git merge hla && + git push gh && + test ... + +Don't: + + - exit() within a