fi
test_expect_success 'setup' '
- unset GIT_PAGER GIT_PAGER_IN_USE &&
+ unset GIT_PAGER GIT_PAGER_IN_USE;
test_might_fail git config --unset core.pager &&
PAGER="cat >paginated.out" &&
# for the first color; the text "commit" comes later.
colorful() {
read firstline <$1
- ! expr "$firstline" : "^[a-zA-Z]" >/dev/null
+ ! expr "$firstline" : "[a-zA-Z]" >/dev/null
}
test_expect_success 'tests can detect color' '
'
test_expect_success 'determine default pager' '
- unset PAGER GIT_PAGER &&
+ unset PAGER GIT_PAGER;
test_might_fail git config --unset core.pager ||
cleanup_fail &&
test -n "$less"
'
-if expr "$less" : '^[a-z][a-z]*$' >/dev/null && test_have_prereq TTY
+if expr "$less" : '[a-z][a-z]*$' >/dev/null && test_have_prereq TTY
then
test_set_prereq SIMPLEPAGER
fi
-test_expect_success SIMPLEPAGER 'default pager is used by default' '
- unset PAGER GIT_PAGER &&
- test_might_fail git config --unset core.pager &&
- rm -f default_pager_used ||
- cleanup_fail &&
+# Use this helper to make it easy for the caller of your
+# terminal-using function to specify whether it should fail.
+# If you write
+#
+# your_test() {
+# parse_args "$@"
+#
+# $test_expectation "$cmd - behaves well" "
+# ...
+# $full_command &&
+# ...
+# "
+# }
+#
+# then your test can be used like this:
+#
+# your_test expect_(success|failure) [test_must_fail] 'git foo'
+#
+parse_args() {
+ test_expectation="test_$1"
+ shift
+ if test "$1" = test_must_fail
+ then
+ full_command="test_must_fail test_terminal "
+ shift
+ else
+ full_command="test_terminal "
+ fi
+ cmd=$1
+ full_command="$full_command $1"
+}
- cat >$less <<-\EOF &&
- #!/bin/sh
- wc >default_pager_used
- EOF
- chmod +x $less &&
- (
- PATH=.:$PATH &&
- export PATH &&
- test_terminal git log
- ) &&
- test -e default_pager_used
-'
+test_default_pager() {
+ parse_args "$@"
+
+ $test_expectation SIMPLEPAGER "$cmd - default pager is used by default" "
+ unset PAGER GIT_PAGER;
+ test_might_fail git config --unset core.pager &&
+ rm -f default_pager_used ||
+ cleanup_fail &&
+
+ cat >\$less <<-\EOF &&
+ #!/bin/sh
+ wc >default_pager_used
+ EOF
+ chmod +x \$less &&
+ (
+ PATH=.:\$PATH &&
+ export PATH &&
+ $full_command
+ ) &&
+ test -e default_pager_used
+ "
+}
-test_expect_success TTY 'PAGER overrides default pager' '
- unset GIT_PAGER &&
- test_might_fail git config --unset core.pager &&
- rm -f PAGER_used ||
- cleanup_fail &&
+test_PAGER_overrides() {
+ parse_args "$@"
- PAGER="wc >PAGER_used" &&
- export PAGER &&
- test_terminal git log &&
- test -e PAGER_used
-'
+ $test_expectation TTY "$cmd - PAGER overrides default pager" "
+ unset GIT_PAGER;
+ test_might_fail git config --unset core.pager &&
+ rm -f PAGER_used ||
+ cleanup_fail &&
-test_expect_success TTY 'core.pager overrides PAGER' '
- unset GIT_PAGER &&
- rm -f core.pager_used ||
- cleanup_fail &&
+ PAGER='wc >PAGER_used' &&
+ export PAGER &&
+ $full_command &&
+ test -e PAGER_used
+ "
+}
- PAGER=wc &&
- export PAGER &&
- git config core.pager "wc >core.pager_used" &&
- test_terminal git log &&
- test -e core.pager_used
-'
+test_core_pager_overrides() {
+ parse_args "$@"
-test_expect_success TTY 'GIT_PAGER overrides core.pager' '
- rm -f GIT_PAGER_used ||
- cleanup_fail &&
+ $test_expectation TTY "$cmd - core.pager overrides PAGER" "
+ unset GIT_PAGER;
+ rm -f core.pager_used ||
+ cleanup_fail &&
- git config core.pager wc &&
- GIT_PAGER="wc >GIT_PAGER_used" &&
- export GIT_PAGER &&
- test_terminal git log &&
- test -e GIT_PAGER_used
-'
+ PAGER=wc &&
+ export PAGER &&
+ git config core.pager 'wc >core.pager_used' &&
+ $full_command &&
+ test -e core.pager_used
+ "
+}
+
+test_core_pager_subdir() {
+ parse_args "$@"
+
+ $test_expectation TTY "$cmd - core.pager from subdirectory" "
+ unset GIT_PAGER;
+ rm -f core.pager_used &&
+ rm -fr sub ||
+ cleanup_fail &&
+
+ PAGER=wc &&
+ stampname=\$(pwd)/core.pager_used &&
+ export PAGER stampname &&
+ git config core.pager 'wc >\"\$stampname\"' &&
+ mkdir sub &&
+ (
+ cd sub &&
+ $full_command
+ ) &&
+ test -e core.pager_used
+ "
+}
+
+test_GIT_PAGER_overrides() {
+ parse_args "$@"
+
+ $test_expectation TTY "$cmd - GIT_PAGER overrides core.pager" "
+ rm -f GIT_PAGER_used ||
+ cleanup_fail &&
+
+ git config core.pager wc &&
+ GIT_PAGER='wc >GIT_PAGER_used' &&
+ export GIT_PAGER &&
+ $full_command &&
+ test -e GIT_PAGER_used
+ "
+}
+
+test_default_pager expect_success 'git log'
+test_PAGER_overrides expect_success 'git log'
+test_core_pager_overrides expect_success 'git log'
+test_core_pager_subdir expect_success 'git log'
+test_GIT_PAGER_overrides expect_success 'git log'
+
+test_default_pager expect_success 'git -p log'
+test_PAGER_overrides expect_success 'git -p log'
+test_core_pager_overrides expect_success 'git -p log'
+test_core_pager_subdir expect_failure 'git -p log'
+test_GIT_PAGER_overrides expect_success 'git -p log'
+
+test_default_pager expect_success test_must_fail 'git -p'
+test_PAGER_overrides expect_success test_must_fail 'git -p'
+test_core_pager_overrides expect_success test_must_fail 'git -p'
+test_core_pager_subdir expect_failure test_must_fail 'git -p'
+test_GIT_PAGER_overrides expect_success test_must_fail 'git -p'
+
+test_default_pager expect_success test_must_fail 'git -p nonsense'
+test_PAGER_overrides expect_success test_must_fail 'git -p nonsense'
+test_core_pager_overrides expect_success test_must_fail 'git -p nonsense'
+test_core_pager_subdir expect_failure test_must_fail 'git -p nonsense'
+test_GIT_PAGER_overrides expect_success test_must_fail 'git -p nonsense'
test_done