Paul-Sebastian Ungureanu <[email protected]> writes:
> This commit introduces tests for `git stash show`
> config. It tests all the cases where `stash.showStat`
> and `stash.showPatch` are unset or set to true / false.
>
> Signed-off-by: Paul-Sebastian Ungureanu <[email protected]>
> ---
> t/t3907-stash-show-config.sh | 81 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 81 insertions(+)
> create mode 100755 t/t3907-stash-show-config.sh
>
> diff --git a/t/t3907-stash-show-config.sh b/t/t3907-stash-show-config.sh
> new file mode 100755
> index 0000000000..8fe369c1a1
> --- /dev/null
> +++ b/t/t3907-stash-show-config.sh
> @@ -0,0 +1,81 @@
> +#!/bin/sh
> +
> +test_description='Test git stash show configuration.'
> +
> +. ./test-lib.sh
> +
> +test_expect_success 'setup' '
> + test_commit file
> +'
> +
> +# takes three parameters:
> +# 1. the stash.showStat value (or "<unset>")
> +# 2. the stash.showPatch value (or "<unset>")
> +# 3. the diff options of the expected output (or nothing for no output)
> +test_stat_and_patch () {
> + if test "<unset>" = "$1"
> + then
> + test_might_fail git config --unset stash.showStat
> + else
> + test_config stash.showStat "$1"
> + fi &&
> +
> + if test "<unset>" = "$2"
> + then
> + test_might_fail git config --unset stash.showPatch
I think you are trying to protect yourself from an error triggered
by unsetting what is not set, but for that, test_unconfig is
probably a better choice, as it still catches errors of other types
and ignores only that "unset a variable that is not set" error.
> + else
> + test_config stash.showPatch "$2"
> + fi &&
> +
> + shift &&
> + shift &&
You can use "shift 2 &&" here (not worth a reroll).
> + echo 2 >file.t &&
> + git diff "$@" >expect &&
When the caller does not give $3 to this function, it does not look
at 'expect'. I think it is clearer if you did
if test $# != 0
then
git diff "$@" >expect
fi &&
here, and ...
> + git stash &&
> + git stash show >actual &&
> +
> + if test -z "$1"
... wrote this as
if test $# = 0
The only difference between '-z "$1"' and '$# = 0' is when he caller
passes an empty string to the function as $3, which you never do, so
the distinction is theoretical, but using $# makes your intention
clear that you do not mean to treat an empty string any specially.
> + then
> + test_must_be_empty actual
> + else
> + test_cmp expect actual
> + fi
> +}
> +
> +test_expect_success 'showStat unset showPatch unset' '
> + test_stat_and_patch "<unset>" "<unset>" --stat
> +'
> +
> +test_expect_success 'showStat unset showPatch false' '
> + test_stat_and_patch "<unset>" false --stat
> +'
> +
> +test_expect_success 'showStat unset showPatch true' '
> + test_stat_and_patch "<unset>" true --stat -p
> +'
> +
> +test_expect_success 'showStat false showPatch unset' '
> + test_stat_and_patch false "<unset>"
> +'
> +
> +test_expect_success 'showStat false showPatch false' '
> + test_stat_and_patch false false
> +'
> +
> +test_expect_success 'showStat false showPatch true' '
> + test_stat_and_patch false true -p
> +'
> +
> +test_expect_success 'showStat true showPatch unset' '
> + test_stat_and_patch true "<unset>" --stat
> +'
> +
> +test_expect_success 'showStat true showPatch false' '
> + test_stat_and_patch true false --stat
> +'
> +
> +test_expect_success 'showStat true showPatch true' '
> + test_stat_and_patch true true --stat -p
> +'
> +
> +test_done