diff options
author | Jonathan Nieder <jrnieder@gmail.com> | 2010-10-16 19:38:07 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-10-18 16:20:19 -0700 |
commit | e674c17db25750f14c1dd1d8f588eb3135b5cea9 (patch) | |
tree | 05a57d86b9ba2bc5cf9b045d36f6f13a73173fe6 /t/lib-terminal.sh | |
parent | 996621eb4d4f7014a6542778420dd23b1d428896 (diff) | |
download | git-e674c17db25750f14c1dd1d8f588eb3135b5cea9.tar.gz |
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>
Diffstat (limited to 't/lib-terminal.sh')
-rw-r--r-- | t/lib-terminal.sh | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh index 5e7ee9a5c7..c383b57ed9 100644 --- a/t/lib-terminal.sh +++ b/t/lib-terminal.sh @@ -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_ "$@" -} |