t7006-pager: if stdout is not a terminal, make a new one
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 20 Feb 2010 08:50:25 +0000 (02:50 -0600)
committerJunio C Hamano <gitster@pobox.com>
Sun, 21 Feb 2010 19:08:17 +0000 (11:08 -0800)
commit2d3ca21677597902f66bf2f2b2cf1b4a623f1e4f
tree52131b10c8f555acaa34ba50d5e9467d435de75f
parent60b6e2200deff208a9757721544a3a311034804f
t7006-pager: if stdout is not a terminal, make a new one

Testing pagination requires (fake or real) access to a terminal so we
can see whether the pagination automatically kicks in, which makes it
hard to get good coverage when running tests without --verbose.  There
are a number of ways to work around that:

 - Replace all isatty calls with calls to a custom xisatty wrapper
   that usually checks for a terminal but can be overridden for tests.
   This would be workable, but it would require implementing xisatty
   separately in three languages (C, shell, and perl) and making sure
   that any code that is to be tested always uses the wrapper.

 - Redirect stdout to /dev/tty.  This would be problematic because
   there might be no terminal available, and even if a terminal is
   available, it might not be appropriate to spew output to it.

 - Create a new pseudo-terminal on the fly and capture its output.

This patch implements the third approach.

The new test-terminal.perl helper uses IO::Pty from Expect.pm to create
a terminal and executes the program specified by its arguments with
that terminal as stdout.  If the IO::Pty module is missing or not
working on a system, the test script will maintain its old behavior
(skipping most of its tests unless GIT_TEST_OPTS includes --verbose).

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7006-pager.sh
t/t7006/test-terminal.perl [new file with mode: 0755]