From: Jonathan Nieder <jrnieder@xxxxxxxxx> Tay Ray Chuan wrote: > [snip] > 2. For terminal tests that capture output/stderr, the TTY prerequisite > warning does not quite work for things 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. Good catch. Such cases (like Jeff's patch) are not well supported currently. :( 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 $ How about this? - use the test_terminal script even when running with "-v" if IO::Pty is available, to allow commands like test_terminal foo >out 2>err - add a separate TTYREDIR prerequisite which is only set when the test_terminal script is usable - 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. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> Signed-off-by: Tay Ray Chuan <rctay89@xxxxxxxxx> --- Picked up from a private discussion. I left the discussion in the patch message to give some background, and it also gives a nice summary of the changes. t/lib-terminal.sh | 24 +++++++++++++----------- 1 files changed, 13 insertions(+), 11 deletions(-) diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh index 5e7ee9a..71d147f 100644 --- a/t/lib-terminal.sh +++ b/t/lib-terminal.sh @@ -1,36 +1,38 @@ #!/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 + elif test -t 1 && test -t 2 + then + >have_tty fi ' -if test -e have_tty -then - test_terminal_() { "$@"; } - test_set_prereq TTY -elif test -e test_terminal_works +if test -e test_terminal_works then test_terminal_() { "$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl "$@" } test_set_prereq TTY + test_set_prereq TTYREDIR +elif test -e have_tty +then + test_terminal_() { "$@"; } + test_set_prereq TTY + else say "# no usable terminal, so skipping some tests" fi test_terminal () { - if ! test_declared_prereq TTY + if ! test_declared_prereq TTY && ! test_declared_prereq TTYREDIR then - echo >&2 'test_terminal: need to declare TTY prerequisite' + echo >&4 'test_terminal: need to declare TTY prerequisite' return 127 fi test_terminal_ "$@" -- 1.7.2.2.513.ge1ef3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html