Git 2.23
[gitweb.git] / t / lib-terminal.sh
index 5e7ee9a5c7ea33a5911006d6a19de0f3cbe121b9..e3809dcead1818400829b27721cf8197de71432b 100644 (file)
@@ -1,37 +1,36 @@
-#!/bin/sh
-
-test_expect_success 'set up terminal for tests' '
-       if test -t 1 && test -t 2
-       then
-               >have_tty
-       elif
-               test_have_prereq PERL &&
-               "$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl \
-                       sh -c "test -t 1 && test -t 2"
-       then
-               >test_terminal_works
-       fi
-'
-
-if test -e have_tty
-then
-       test_terminal_() { "$@"; }
-       test_set_prereq TTY
-elif test -e test_terminal_works
-then
-       test_terminal_() {
-               "$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl "$@"
-       }
-       test_set_prereq TTY
-else
-       say "# no usable terminal, so skipping some tests"
-fi
+# Helpers for terminal output tests.
 
+# Catch tests which should depend on TTY but forgot to. There's no need
+# to additionally check that the TTY prereq is set here.  If the test declared
+# it and we are running the test, then it must have been set.
 test_terminal () {
        if ! test_declared_prereq TTY
        then
-               echo >&2 'test_terminal: need to declare TTY prerequisite'
+               echo >&4 "test_terminal: need to declare TTY prerequisite"
                return 127
        fi
-       test_terminal_ "$@"
-}
+       perl "$TEST_DIRECTORY"/test-terminal.perl "$@" 2>&7
+} 7>&2 2>&4
+
+test_lazy_prereq TTY '
+       test_have_prereq PERL &&
+
+       # Reading from the pty master seems to get stuck _sometimes_
+       # on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.
+       #
+       # Reproduction recipe: run
+       #
+       #       i=0
+       #       while ./test-terminal.perl echo hi $i
+       #       do
+       #               : $((i = $i + 1))
+       #       done
+       #
+       # After 2000 iterations or so it hangs.
+       # https://rt.cpan.org/Ticket/Display.html?id=65692
+       #
+       test "$(uname -s)" != Darwin &&
+
+       perl "$TEST_DIRECTORY"/test-terminal.perl \
+               sh -c "test -t 1 && test -t 2"
+'