git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/8] tests: factor out terminal handling from t7006

From
Tay Ray Chuan <rctay89@gmail.com>
Date
Oct 16, 2010, 18:36 UTC
Message-ID
<1287254223-4496-2-git-send-email-rctay89@gmail.com>
In-Reply-To
<1287254223-4496-1-git-send-email-rctay89@gmail.com>
From: Jeff King <peff@peff.net>

Other tests besides the pager ones may want to check how we handle output to a terminal. This patch makes the code reusable.

Signed-off-by: Jeff King <peff@peff.net>
---
  No change.
 t/lib-terminal.sh          |   28 +++++++++++++++++++++
 t/t7006-pager.sh           |   31 +----------------------
 t/t7006/test-terminal.perl |   58 --------------------------------------------
 t/test-terminal.perl       |   58 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 87 insertions(+), 88 deletions(-)
 create mode 100644 t/lib-terminal.sh
 delete mode 100755 t/t7006/test-terminal.perl
 create mode 100755 t/test-terminal.perl
diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh
new file mode 100644
index 0000000..6fc33db
--- /dev/null
+++ b/t/lib-terminal.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+test_expect_success 'set up terminal for tests' '
+	if test -t 1
+	then
+		>stdout_is_tty
+	elif
+		test_have_prereq PERL &&
+		"$PERL_PATH" "$TEST_DIRECTORY"/test-terminal.perl \
+			sh -c "test -t 1"
+	then
+		>test_terminal_works
+	fi
+'
+
+if test -e stdout_is_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
diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh
index fb744e3..17e54d3 100755
--- a/t/t7006-pager.sh
+++ b/t/t7006-pager.sh
@@ -4,42 +4,13 @@ test_description='Test automatic use of a pager.'
 
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-pager.sh
+. "$TEST_DIRECTORY"/lib-terminal.sh
 
 cleanup_fail() {
 	echo >&2 cleanup failed
 	(exit 1)
 }
 
-test_expect_success 'set up terminal for tests' '
-	rm -f stdout_is_tty ||
-	cleanup_fail &&
-
-	if test -t 1
-	then
-		>stdout_is_tty
-	elif
-		test_have_prereq PERL &&
-		"$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl \
-			sh -c "test -t 1"
-	then
-		>test_terminal_works
-	fi
-'
-
-if test -e stdout_is_tty
-then
-	test_terminal() { "$@"; }
-	test_set_prereq TTY
-elif test -e test_terminal_works
-then
-	test_terminal() {
-		"$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl "$@"
-	}
-	test_set_prereq TTY
-else
-	say "# no usable terminal, so skipping some tests"
-fi
-
 test_expect_success 'setup' '
 	unset GIT_PAGER GIT_PAGER_IN_USE;
 	test_might_fail git config --unset core.pager &&
diff --git a/t/t7006/test-terminal.perl b/t/t7006/test-terminal.perl
deleted file mode 100755
index 73ff809..0000000
--- a/t/t7006/test-terminal.perl
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use IO::Pty;
-use File::Copy;
-
-# Run @$argv in the background with stdout redirected to $out.
-sub start_child {
-	my ($argv, $out) = @_;
-	my $pid = fork;
-	if (not defined $pid) {
-		die "fork failed: $!"
-	} elsif ($pid == 0) {
-		open STDOUT, ">&", $out;
-		close $out;
-		exec(@$argv) or die "cannot exec '$argv->[0]': $!"
-	}
-	return $pid;
-}
-
-# Wait for $pid to finish.
-sub finish_child {
-	# Simplified from wait_or_whine() in run-command.c.
-	my ($pid) = @_;
-
-	my $waiting = waitpid($pid, 0);
-	if ($waiting < 0) {
-		die "waitpid failed: $!";
-	} elsif ($? & 127) {
-		my $code = $? & 127;
-		warn "died of signal $code";
-		return $code - 128;
-	} else {
-		return $? >> 8;
-	}
-}
-
-sub xsendfile {
-	my ($out, $in) = @_;
-
-	# Note: the real sendfile() cannot read from a terminal.
-
-	# It is unspecified by POSIX whether reads
-	# from a disconnected terminal will return
-	# EIO (as in AIX 4.x, IRIX, and Linux) or
-	# end-of-file.  Either is fine.
-	copy($in, $out, 4096) or $!{EIO} or die "cannot copy from child: $!";
-}
-
-if ($#ARGV < 1) {
-	die "usage: test-terminal program args";
-}
-my $master = new IO::Pty;
-my $slave = $master->slave;
-my $pid = start_child(\@ARGV, $slave);
-close $slave;
-xsendfile(\*STDOUT, $master);
-exit(finish_child($pid));
diff --git a/t/test-terminal.perl b/t/test-terminal.perl
new file mode 100755
index 0000000..73ff809
--- /dev/null
+++ b/t/test-terminal.perl
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use IO::Pty;
+use File::Copy;
+
+# Run @$argv in the background with stdout redirected to $out.
+sub start_child {
+	my ($argv, $out) = @_;
+	my $pid = fork;
+	if (not defined $pid) {
+		die "fork failed: $!"
+	} elsif ($pid == 0) {
+		open STDOUT, ">&", $out;
+		close $out;
+		exec(@$argv) or die "cannot exec '$argv->[0]': $!"
+	}
+	return $pid;
+}
+
+# Wait for $pid to finish.
+sub finish_child {
+	# Simplified from wait_or_whine() in run-command.c.
+	my ($pid) = @_;
+
+	my $waiting = waitpid($pid, 0);
+	if ($waiting < 0) {
+		die "waitpid failed: $!";
+	} elsif ($? & 127) {
+		my $code = $? & 127;
+		warn "died of signal $code";
+		return $code - 128;
+	} else {
+		return $? >> 8;
+	}
+}
+
+sub xsendfile {
+	my ($out, $in) = @_;
+
+	# Note: the real sendfile() cannot read from a terminal.
+
+	# It is unspecified by POSIX whether reads
+	# from a disconnected terminal will return
+	# EIO (as in AIX 4.x, IRIX, and Linux) or
+	# end-of-file.  Either is fine.
+	copy($in, $out, 4096) or $!{EIO} or die "cannot copy from child: $!";
+}
+
+if ($#ARGV < 1) {
+	die "usage: test-terminal program args";
+}
+my $master = new IO::Pty;
+my $slave = $master->slave;
+my $pid = start_child(\@ARGV, $slave);
+close $slave;
+xsendfile(\*STDOUT, $master);
+exit(finish_child($pid));
-- 
1.7.2.2.513.ge1ef3
Previous: Tay Ray ChuanNext: Tay Ray Chuan
Message 15 of 41 in “Fix to push --progress. The --progress flag was not being passed into tranport.c from send-pack.h, making the --progress flag unusable”
  1. Fix to push --progress. The --progress flag was not being passed into tranport.c from send-pack.h, making the --progress flag unusableChase Brammer, Oct 12, 2010
  2. Jonathan NiederOct 12, 2010
  3. Junio C HamanoOct 13, 2010
  4. Jeff KingOct 13, 2010
  5. Tay Ray ChuanOct 13, 2010
  6. 0/3 fix push --progress over file://, git://, etc.Tay Ray Chuan, Oct 13, 2010
  7. 1/3 t5523-push-upstream: add function to ensure fresh upstream repoTay Ray Chuan, Oct 13, 2010
  8. Jonathan NiederOct 13, 2010
  9. 2/3 t5523-push-upstream: test progress messagesTay Ray Chuan, Oct 13, 2010
  10. 3/3 push: pass --progress down to git-pack-objectsTay Ray Chuan, Oct 13, 2010
  11. Tay Ray ChuanOct 14, 2010
  12. Jeff KingOct 14, 2010
  13. Tay Ray ChuanOct 13, 2010
  14. 0/8 fix push --progress over file://, git://, etc.Tay Ray Chuan, Oct 16, 2010
  15. 1/8 tests: factor out terminal handling from t7006Tay Ray Chuan, Oct 16, 2010
  16. 2/8 tests: test terminal output to both stdout and stderrTay Ray Chuan, Oct 16, 2010
  17. 3/8 test-lib: allow test code to check the list of declared prerequisitesTay Ray Chuan, Oct 16, 2010
  18. 4/8 test_terminal: catch use without TTY prerequisiteTay Ray Chuan, Oct 16, 2010
  19. 5/8 test_terminal: give priority to test-terminal.perl usageTay Ray Chuan, Oct 16, 2010
  20. 6/8 t5523-push-upstream: add function to ensure fresh upstream repoTay Ray Chuan, Oct 16, 2010
  21. 7/8 t5523-push-upstream: test progress messagesTay Ray Chuan, Oct 16, 2010
  22. 8/8 push: pass --progress down to git-pack-objectsTay Ray Chuan, Oct 16, 2010
  23. Jonathan NiederOct 17, 2010
  24. Jonathan NiederOct 17, 2010
  25. Jeff KingOct 22, 2010
  26. Jonathan NiederOct 17, 2010
  27. 0/3 more push progress testsJeff King, Oct 14, 2010
  28. 1/3 tests: factor out terminal handling from t7006Jeff King, Oct 14, 2010
  29. Jonathan NiederOct 14, 2010
  30. 2/3 tests: test terminal output to both stdout and stderrJeff King, Oct 14, 2010
  31. Jonathan NiederOct 14, 2010
  32. 3/3 t5523: test push progress output to ttyJeff King, Oct 14, 2010
  33. Jonathan NiederOct 14, 2010
  34. Jeff KingOct 14, 2010
  35. 0/2 test_terminal: check that TTY prerequisite is declaredJonathan Nieder, Oct 14, 2010
  36. 1/2 test-lib: allow test code to check the list of declared prerequisitesJonathan Nieder, Oct 14, 2010
  37. Ævar Arnfjörð BjarmasonOct 15, 2010
  38. Jonathan NiederOct 15, 2010
  39. 2/2 test_terminal: catch use without TTY prerequisiteJonathan Nieder, Oct 14, 2010
  40. Jeff KingOct 15, 2010
  41. Tay Ray ChuanOct 15, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.