test_terminal: ensure redirections work reliably
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>
This commit is contained in:
parent
996621eb4d
commit
e674c17db2
@ -1,37 +1,19 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_expect_success 'set up terminal for tests' '
|
||||
if test -t 1 && test -t 2
|
||||
then
|
||||
>have_tty
|
||||
elif
|
||||
if
|
||||
test_have_prereq PERL &&
|
||||
"$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl \
|
||||
sh -c "test -t 1 && test -t 2"
|
||||
then
|
||||
>test_terminal_works
|
||||
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
|
||||
'
|
||||
|
||||
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
|
||||
|
||||
test_terminal () {
|
||||
if ! test_declared_prereq TTY
|
||||
then
|
||||
echo >&2 'test_terminal: need to declare TTY prerequisite'
|
||||
return 127
|
||||
fi
|
||||
test_terminal_ "$@"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user