t7006 (pager): introduce helper for parameterized tests
[gitweb.git] / t / t7006-pager.sh
index 3bc7a2a796bdb97702eaaf92e26b189cc4204c90..b117ebb5a7d6c38804b1396c2f30628e25744636 100755 (executable)
@@ -40,7 +40,7 @@ else
 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" &&
@@ -109,7 +109,7 @@ test_expect_success TTY 'no pager with --no-pager' '
 # 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' '
@@ -159,7 +159,7 @@ test_expect_success 'color when writing to a file intended for a pager' '
 '
 
 test_expect_success 'determine default pager' '
-       unset PAGER GIT_PAGER &&
+       unset PAGER GIT_PAGER;
        test_might_fail git config --unset core.pager ||
        cleanup_fail &&
 
@@ -167,63 +167,99 @@ test_expect_success 'determine default pager' '
        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 &&
+# 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"
+}
+
+parse_args expect_success 'git log'
+$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 &&
+       cat >\$less <<-\EOF &&
        #!/bin/sh
        wc >default_pager_used
        EOF
-       chmod +x $less &&
+       chmod +x \$less &&
        (
-               PATH=.:$PATH &&
+               PATH=.:\$PATH &&
                export PATH &&
-               test_terminal git log
+               $full_command
        ) &&
        test -e default_pager_used
-'
+"
 
-test_expect_success TTY 'PAGER overrides default pager' '
-       unset GIT_PAGER &&
+parse_args expect_success 'git log'
+$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 &&
 
-       PAGER="wc >PAGER_used" &&
+       PAGER='wc >PAGER_used' &&
        export PAGER &&
-       test_terminal git log &&
+       $full_command &&
        test -e PAGER_used
-'
+"
 
-test_expect_success TTY 'core.pager overrides PAGER' '
-       unset GIT_PAGER &&
+parse_args expect_success 'git log'
+$test_expectation TTY "$cmd - core.pager overrides PAGER" "
+       unset GIT_PAGER;
        rm -f core.pager_used ||
        cleanup_fail &&
 
        PAGER=wc &&
        export PAGER &&
-       git config core.pager "wc >core.pager_used" &&
-       test_terminal git log &&
+       git config core.pager 'wc >core.pager_used' &&
+       $full_command &&
        test -e core.pager_used
-'
+"
 
-test_expect_success TTY 'GIT_PAGER overrides core.pager' '
+parse_args expect_success 'git log'
+$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" &&
+       GIT_PAGER='wc >GIT_PAGER_used' &&
        export GIT_PAGER &&
-       test_terminal git log &&
+       $full_command &&
        test -e GIT_PAGER_used
-'
+"
 
 test_done