Thread (39 messages) flat view 39 messages, 6 authors, 2016-06-15
STALE3735d

[PATCH v2 5/8] test_terminal: give priority to test-terminal.perl usage

From: Tay Ray Chuan <hidden>
Date: 2016-06-15 22:49:48
Subsystem: the rest · Maintainer: Linus Torvalds

From: Jonathan Nieder <redacted>

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 <redacted>
Signed-off-by: Tay Ray Chuan <redacted>
---

  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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help