e674c17db2
For terminal tests that capture output/stderr, the TTY prerequisite warning does not quite work for commands like test_terminal foo >out 2>err because the warning gets "swallowed" up by the redirection that's supposed only to be done by the subcommand. Even worse, the outcome depends on whether stdout was already a terminal (in which case test_terminal is a noop) or not (in which case test_terminal introduces a pseudo-tty in the middle of the pipeline). $ test_terminal.perl sh -c 'test -t 1 && echo >&2 YES' >out YES $ sh -c 'test -t 1 && echo >&2 YES' >out $ So: - use the test_terminal script even when running with "-v". - skip tests that require a terminal when the test_terminal script is unusable because IO::Pty is not installed. - write the "need to declare TTY prerequisite" message to fd 4, where it will be printed when running tests with -v, rather than being swallowed up by an unrelated redireciton. Noticed-by: Tay Ray Chuan <rctay89@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
20 lines
425 B
Bash
20 lines
425 B
Bash
#!/bin/sh
|
|
|
|
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"
|
|
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 "$@"
|
|
}
|
|
fi
|
|
'
|