aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-04-01 13:21:35 -0700
committerJunio C Hamano <gitster@pobox.com>2024-04-01 13:21:35 -0700
commitf0c570e20b1adcb0ab2ed5d61d3c762ea4bf86e3 (patch)
tree5154bf9fae1a3e3dea8446a0154880facca24b78
parent6938b355c01ae2479b07b2f3c067ea1863f0b2bb (diff)
parent7c4449eb31b60e9a39fa22ef8d18277f45610db2 (diff)
downloadgit-f0c570e20b1adcb0ab2ed5d61d3c762ea4bf86e3.tar.gz
Merge branch 'ps/t7800-variable-interpolation-fix'
Fix the way recently added tests interpolate variables defined outside them, and document the best practice to help future developers. * ps/t7800-variable-interpolation-fix: t/README: document how to loop around test cases t7800: use single quotes for test bodies t7800: improve test descriptions with empty arguments
-rw-r--r--t/README20
-rwxr-xr-xt/t7800-difftool.sh40
2 files changed, 40 insertions, 20 deletions
diff --git a/t/README b/t/README
index 621d3b8c09..aae673d8af 100644
--- a/t/README
+++ b/t/README
@@ -724,6 +724,26 @@ The "do's:"
Note that we still &&-chain the loop to propagate failures from
earlier commands.
+ - Repeat tests with slightly different arguments in a loop.
+
+ In some cases it may make sense to re-run the same set of tests with
+ different options or commands to ensure that the command behaves
+ despite the different parameters. This can be achieved by looping
+ around a specific parameter:
+
+ for arg in '' "--foo"
+ do
+ test_expect_success "test command ${arg:-without arguments}" '
+ command $arg
+ '
+ done
+
+ Note that while the test title uses double quotes ("), the test body
+ should continue to use single quotes (') to avoid breakage in case the
+ values contain e.g. quoting characters. The loop variable will be
+ accessible regardless of the single quotes as the test body is passed
+ to `eval`.
+
And here are the "don'ts:"
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 96ae5d5880..cc917b257e 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -93,42 +93,42 @@ test_expect_success 'difftool forwards arguments to diff' '
for opt in '' '--dir-diff'
do
- test_expect_success "difftool ${opt} ignores exit code" "
+ test_expect_success "difftool ${opt:-without options} ignores exit code" '
test_config difftool.error.cmd false &&
git difftool ${opt} -y -t error branch
- "
+ '
- test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code" "
+ test_expect_success "difftool ${opt:-without options} forwards exit code with --trust-exit-code" '
test_config difftool.error.cmd false &&
test_must_fail git difftool ${opt} -y --trust-exit-code -t error branch
- "
+ '
- test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code for built-ins" "
+ test_expect_success "difftool ${opt:-without options} forwards exit code with --trust-exit-code for built-ins" '
test_config difftool.vimdiff.path false &&
test_must_fail git difftool ${opt} -y --trust-exit-code -t vimdiff branch
- "
+ '
- test_expect_success "difftool ${opt} honors difftool.trustExitCode = true" "
+ test_expect_success "difftool ${opt:-without options} honors difftool.trustExitCode = true" '
test_config difftool.error.cmd false &&
test_config difftool.trustExitCode true &&
test_must_fail git difftool ${opt} -y -t error branch
- "
+ '
- test_expect_success "difftool ${opt} honors difftool.trustExitCode = false" "
+ test_expect_success "difftool ${opt:-without options} honors difftool.trustExitCode = false" '
test_config difftool.error.cmd false &&
test_config difftool.trustExitCode false &&
git difftool ${opt} -y -t error branch
- "
+ '
- test_expect_success "difftool ${opt} ignores exit code with --no-trust-exit-code" "
+ test_expect_success "difftool ${opt:-without options} ignores exit code with --no-trust-exit-code" '
test_config difftool.error.cmd false &&
test_config difftool.trustExitCode true &&
git difftool ${opt} -y --no-trust-exit-code -t error branch
- "
+ '
- test_expect_success "difftool ${opt} stops on error with --trust-exit-code" "
- test_when_finished 'rm -f for-diff .git/fail-right-file' &&
- test_when_finished 'git reset -- for-diff' &&
+ test_expect_success "difftool ${opt:-without options} stops on error with --trust-exit-code" '
+ test_when_finished "rm -f for-diff .git/fail-right-file" &&
+ test_when_finished "git reset -- for-diff" &&
write_script .git/fail-right-file <<-\EOF &&
echo failed
exit 1
@@ -138,19 +138,19 @@ do
test_must_fail git difftool ${opt} -y --trust-exit-code \
--extcmd .git/fail-right-file branch >actual &&
test_line_count = 1 actual
- "
+ '
- test_expect_success "difftool ${opt} honors exit status if command not found" "
+ test_expect_success "difftool ${opt:-without options} honors exit status if command not found" '
test_config difftool.nonexistent.cmd i-dont-exist &&
test_config difftool.trustExitCode false &&
- if test "${opt}" = '--dir-diff'
+ if test "${opt}" = --dir-diff
then
expected_code=127
else
expected_code=128
fi &&
- test_expect_code \${expected_code} git difftool ${opt} -y -t nonexistent branch
- "
+ test_expect_code ${expected_code} git difftool ${opt} -y -t nonexistent branch
+ '
done
test_expect_success 'difftool honors --gui' '