Git 2.23
[gitweb.git] / t / lib-terminal.sh
index c383b57ed9d995f530004923962c45ab38c7fc8b..e3809dcead1818400829b27721cf8197de71432b 100644 (file)
@@ -1,19 +1,36 @@
-#!/bin/sh
+# Helpers for terminal output tests.
 
-test_expect_success 'set up terminal for tests' '
-       if
-               test_have_prereq PERL &&
-               "$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl \
-                       sh -c "test -t 1 && test -t 2"
+# 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
-               test_set_prereq TTY &&
-               test_terminal () {
-                       if ! test_declared_prereq TTY
-                       then
-                               echo >&4 "test_terminal: need to declare TTY prerequisite"
-                               return 127
-                       fi
-                       "$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl "$@"
-               }
+               echo >&4 "test_terminal: need to declare TTY prerequisite"
+               return 127
        fi
+       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"
 '