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' '