All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Tay Ray Chuan <rctay89@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>, Jeff King <peff@peff.net>,
	Chase Brammer <cbrammer@gmail.com>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 5/8] test_terminal: give priority to test-terminal.perl usage
Date: Sat, 16 Oct 2010 19:38:07 -0500	[thread overview]
Message-ID: <20101017003807.GF20883@burratino> (raw)
In-Reply-To: <1287254223-4496-6-git-send-email-rctay89@gmail.com>

Tay Ray Chuan wrote:

>  - 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.

The patches up to this one look good to me.  This one behaves
as advertised, but I think the API is lousy --- it is just
begging people to use the TTY prereq where TTYREDIR is needed.

Better to change TTY to mean TTYREDIR and drop support for
test_terminal on systems without IO::Pty:

-- 8< --
Subject: 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>
---
The only other sane alternative I can think of is to introduce
TTYNOREDIR, since at least people wouldn't be tempted to use
that.  Distinguishing between

	test_expect_success 'foo' '
		test_terminal bar >out 2>err
	'

and

	test_expect_success 'foo' '
		test_terminal bar
	'

from a script run as

	sh t1234-some-script.sh >log 2>err.log

does not seem to be easy without OS-specific hacks like
"readlink /dev/fd/1".

 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 5e7ee9a..c383b57 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_ "$@"
-}
-- 
1.7.2.3

  parent reply	other threads:[~2010-10-17  0:41 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-12 19:04 Push not writing to standard error Chase Brammer
2010-10-12 19:21 ` Jonathan Nieder
2010-10-12 19:32   ` Jeff King
2010-10-12 19:38     ` Jeff King
2010-10-12 20:37       ` Chase Brammer
2010-10-12 20:48         ` Jeff King
2010-10-12 22:18           ` Chase Brammer
2010-10-13 17:33       ` Junio C Hamano
2010-10-13 17:45         ` Jeff King
2010-10-12 22:21 ` [PATCH] Fix to push --progress. The --progress flag was not being passed into tranport.c from send-pack.h, making the --progress flag unusable Chase Brammer
2010-10-12 22:44   ` Jonathan Nieder
2010-10-13 17:49   ` Junio C Hamano
2010-10-13 17:55     ` Jeff King
2010-10-13 18:40   ` Tay Ray Chuan
2010-10-13 19:31   ` [PATCH 0/3] fix push --progress over file://, git://, etc Tay Ray Chuan
2010-10-13 19:31     ` [PATCH 1/3] t5523-push-upstream: add function to ensure fresh upstream repo Tay Ray Chuan
2010-10-13 19:30       ` Jonathan Nieder
2010-10-13 19:31       ` [PATCH 2/3] t5523-push-upstream: test progress messages Tay Ray Chuan
2010-10-13 19:31         ` [PATCH 3/3] push: pass --progress down to git-pack-objects Tay Ray Chuan
2010-10-14  0:59           ` Tay Ray Chuan
2010-10-14  1:24             ` Jeff King
2010-10-13 19:35     ` [PATCH 0/3] fix push --progress over file://, git://, etc Tay Ray Chuan
2010-10-16 18:36       ` [PATCH v2 0/8] " Tay Ray Chuan
2010-10-16 18:36         ` [PATCH v2 1/8] tests: factor out terminal handling from t7006 Tay Ray Chuan
2010-10-16 18:36           ` [PATCH v2 2/8] tests: test terminal output to both stdout and stderr Tay Ray Chuan
2010-10-16 18:36             ` [PATCH v2 3/8] test-lib: allow test code to check the list of declared prerequisites Tay Ray Chuan
2010-10-16 18:36               ` [PATCH v2 4/8] test_terminal: catch use without TTY prerequisite Tay Ray Chuan
2010-10-16 18:37                 ` [PATCH v2 5/8] test_terminal: give priority to test-terminal.perl usage Tay Ray Chuan
2010-10-16 18:37                   ` [PATCH v2 6/8] t5523-push-upstream: add function to ensure fresh upstream repo Tay Ray Chuan
2010-10-16 18:37                     ` [PATCH v2 7/8] t5523-push-upstream: test progress messages Tay Ray Chuan
2010-10-16 18:37                       ` [PATCH v2 8/8] push: pass --progress down to git-pack-objects Tay Ray Chuan
2010-10-17  0:46                       ` [PATCH v2 7/8] t5523-push-upstream: test progress messages Jonathan Nieder
2010-10-17  0:38                   ` Jonathan Nieder [this message]
2010-10-22 19:42                   ` [PATCH v2 5/8] test_terminal: give priority to test-terminal.perl usage Jeff King
2010-10-17  0:51         ` [PATCH v2 0/8] fix push --progress over file://, git://, etc Jonathan Nieder
2010-10-14  3:02     ` [PATCH 0/3] more push progress tests Jeff King
2010-10-14  3:04       ` [PATCH 1/3] tests: factor out terminal handling from t7006 Jeff King
2010-10-14  3:10         ` Jonathan Nieder
2010-10-14  3:04       ` [PATCH 2/3] tests: test terminal output to both stdout and stderr Jeff King
2010-10-14  3:27         ` Jonathan Nieder
2010-10-14  3:05       ` [PATCH 3/3] t5523: test push progress output to tty Jeff King
2010-10-14  3:16         ` Jonathan Nieder
2010-10-14  3:34           ` Jeff King
2010-10-14 20:37             ` [PATCH/RFC 0/2] test_terminal: check that TTY prerequisite is declared Jonathan Nieder
2010-10-14 20:40               ` [PATCH 1/2] test-lib: allow test code to check the list of declared prerequisites Jonathan Nieder
2010-10-15  5:18                 ` Ævar Arnfjörð Bjarmason
2010-10-15  5:34                   ` Jonathan Nieder
2010-10-14 20:41               ` [PATCH 2/2] test_terminal: catch use without TTY prerequisite Jonathan Nieder
2010-10-15  4:42               ` [PATCH/RFC 0/2] test_terminal: check that TTY prerequisite is declared Jeff King
2010-10-15 11:27                 ` Tay Ray Chuan
2010-10-18 16:39 ` Push not writing to standard error Scott R. Godin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101017003807.GF20883@burratino \
    --to=jrnieder@gmail.com \
    --cc=cbrammer@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=rctay89@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.