git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr
@ 2008-06-17  6:59 Lea Wiemann
  2008-06-17  6:59 ` [PATCH 2/2 v4] Git.pm: add test suite Lea Wiemann
  2008-06-18 20:24 ` [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Olivier Marin
  0 siblings, 2 replies; 13+ messages in thread
From: Lea Wiemann @ 2008-06-17  6:59 UTC (permalink / raw)
  To: git; +Cc: Lea Wiemann

This is for running external test scripts in other programming
languages that provide continuous output about their tests.  Using
test_expect_success (like "test_expect_success 'description' 'perl
test-script.pl'") doesn't suffice here because test_expect_success
eats stdout in non-verbose mode, which is not fixable without major
file descriptor trickery.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
---
Changed since v1
<http://article.gmane.org/gmane.comp.version-control.git/83415>: Fixed
whitespace.

Both functions have been tested with real perl tests and are working
fine.

These two patches apply on master.

 t/test-lib.sh |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/t/test-lib.sh b/t/test-lib.sh
index c861141..b46fe68 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -302,6 +302,64 @@ test_expect_code () {
 	echo >&3 ""
 }
 
+# test_external runs external test scripts that provide continuous
+# test output about their progress, and succeeds/fails on
+# zero/non-zero exit code.  It outputs the test output on stdout even
+# in non-verbose mode, and announces the external script with "* run
+# <n>: ..." before running it.  When providing relative paths, keep in
+# mind that all scripts run in "trash directory".
+# Usage: test_external description command arguments...
+# Example: test_external 'Perl API' perl ../path/to/test.pl
+test_external () {
+	test "$#" -eq 3 ||
+	error >&5 "bug in the test script: not 3 parameters to test_external"
+	descr="$1"
+	shift
+	if ! test_skip "$descr" "$@"
+	then
+		# Announce the script to reduce confusion about the
+		# test output that follows.
+		say_color "" " run $(expr "$test_count" + 1): $descr ($*)"
+		# Run command; redirect its stderr to &4 as in
+		# test_run_, but keep its stdout on our stdout even in
+		# non-verbose mode.
+		"$@" 2>&4
+		if [ "$?" = 0 ]
+		then
+			test_ok_ "$descr"
+		else
+			test_failure_ "$descr" "$@"
+		fi
+	fi
+}
+
+# Like test_external, but in addition tests that the command generated
+# no output on stderr.
+test_external_without_stderr () {
+	# The temporary file has no (and must have no) security
+	# implications.
+	tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi
+	stderr="$tmp/git-external-stderr.$$.tmp"
+	test_external "$@" 4> "$stderr"
+	[ -f "$stderr" ] || eror "Internal error: $stderr disappeared."
+	descr="no stderr: $1"
+	shift
+	say >&3 "expecting no stderr from previous command"
+	if [ ! -s "$stderr" ]; then
+		rm "$stderr"
+		test_ok_ "$descr"
+	else
+		if [ "$verbose" = t ]; then
+			output=`echo; echo Stderr is:; cat "$stderr"`
+		else
+			output=
+		fi
+		# rm first in case test_failure exits.
+		rm "$stderr"
+		test_failure_ "$descr" "$@" "$output"
+	fi
+}
+
 # This is not among top-level (test_expect_success | test_expect_failure)
 # but is a prefix that can be used in the test script, like:
 #
-- 
1.5.6.rc3.7.ged9620

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/2 v4] Git.pm: add test suite
  2008-06-17  6:59 [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Lea Wiemann
@ 2008-06-17  6:59 ` Lea Wiemann
  2008-06-18  3:16   ` Junio C Hamano
  2008-06-18 20:32   ` Olivier Marin
  2008-06-18 20:24 ` [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Olivier Marin
  1 sibling, 2 replies; 13+ messages in thread
From: Lea Wiemann @ 2008-06-17  6:59 UTC (permalink / raw)
  To: git; +Cc: Lea Wiemann

Add a shell script (t/t9700-perl-git.sh) that sets up a git repository
and a perl script (t/t9700/test.pl) that runs the actual tests.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
---
Changed since v3
<http://thread.gmane.org/gmane.comp.version-control.git/83425/focus=83480>:
Only test the vanilla Git.pm, as I'm not intending to extend it right
now.  So no Git::get_hash (or Git::rev_parse) method there.

I also simplified the test repository setup code a bit.

 t/t9700-perl-git.sh |   39 ++++++++++++++++++++
 t/t9700/test.pl     |   99 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 138 insertions(+), 0 deletions(-)
 create mode 100755 t/t9700-perl-git.sh
 create mode 100755 t/t9700/test.pl

diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
new file mode 100755
index 0000000..592d79a
--- /dev/null
+++ b/t/t9700-perl-git.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Lea Wiemann
+#
+
+test_description='perl interface (Git.pm)'
+. ./test-lib.sh
+
+# set up test repository
+
+test_expect_success \
+    'set up test repository' \
+    'echo "test file 1" > file1 &&
+     echo "test file 2" > file2 &&
+     mkdir directory1 &&
+     echo "in directory1" >> directory1/file &&
+     mkdir directory2 &&
+     echo "in directory2" >> directory2/file &&
+     git add . &&
+     git commit -m "first commit" &&
+
+     echo "changed file 1" > file1 &&
+     git commit -a -m "second commit" &&
+
+     git-config --add color.test.slot1 green &&
+     git-config --add test.string value &&
+     git-config --add test.dupstring value1 &&
+     git-config --add test.dupstring value2 &
+     git-config --add test.booltrue true &&
+     git-config --add test.boolfalse no &&
+     git-config --add test.boolother other &&
+     git-config --add test.int 2k
+     '
+
+test_external_without_stderr \
+    'Perl API' \
+    perl ../t9700/test.pl
+
+test_done
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
new file mode 100755
index 0000000..8318fec
--- /dev/null
+++ b/t/t9700/test.pl
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+use lib (split(/:/, $ENV{GITPERLLIB}));
+
+use warnings;
+use strict;
+
+use Test::More qw(no_plan);
+
+use Cwd;
+use File::Basename;
+use File::Temp;
+use IO::String;
+
+BEGIN { use_ok('Git') }
+
+# set up
+our $repo_dir = "trash directory";
+our $abs_repo_dir = Cwd->cwd;
+die "this must be run by calling the t/t97* shell script(s)\n"
+    if basename(Cwd->cwd) ne $repo_dir;
+ok(our $r = Git->repository(Directory => "."), "open repository");
+
+# config
+is($r->config("test.string"), "value", "config scalar: string");
+is_deeply([$r->config("test.dupstring")], ["value1", "value2"],
+	  "config array: string");
+is($r->config("test.nonexistent"), undef, "config scalar: nonexistent");
+is_deeply([$r->config("test.nonexistent")], [], "config array: nonexistent");
+is($r->config_int("test.int"), 2048, "config_int: integer");
+is($r->config_int("test.nonexistent"), undef, "config_int: nonexistent");
+ok($r->config_bool("test.booltrue"), "config_bool: true");
+ok(!$r->config_bool("test.boolfalse"), "config_bool: false");
+our $ansi_green = "\x1b[32m";
+is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color");
+# Cannot test $r->get_colorbool("color.foo")) because we do not
+# control whether our STDOUT is a terminal.
+
+# Failure cases for config:
+# Save and restore STDERR; we will probably extract this into a
+# "dies_ok" method and possibly move the STDERR handling to Git.pm.
+open our $tmpstderr, ">&", STDERR or die "cannot save STDERR"; close STDERR;
+eval { $r->config("test.dupstring") };
+ok($@, "config: duplicate entry in scalar context fails");
+eval { $r->config_bool("test.boolother") };
+ok($@, "config_bool: non-boolean values fail");
+open STDERR, ">&", $tmpstderr or die "cannot restore STDERR";
+
+# ident
+like($r->ident("aUthor"), qr/^A U Thor <author\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: author (type)");
+like($r->ident("cOmmitter"), qr/^C O Mitter <committer\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: committer (type)");
+is($r->ident("invalid"), "invalid", "ident scalar: invalid ident string (no parsing)");
+my ($name, $email, $time_tz) = $r->ident('author');
+is_deeply([$name, $email], ["A U Thor", "author\@example.com"],
+	 "ident array: author");
+like($time_tz, qr/[0-9]+ \+0000/, "ident array: author");
+is_deeply([$r->ident("Name <email> 123 +0000")], ["Name", "email", "123 +0000"],
+	  "ident array: ident string");
+is_deeply([$r->ident("invalid")], [], "ident array: invalid ident string");
+
+# ident_person
+is($r->ident_person("aUthor"), "A U Thor <author\@example.com>",
+   "ident_person: author (type)");
+is($r->ident_person("Name <email> 123 +0000"), "Name <email>",
+   "ident_person: ident string");
+is($r->ident_person("Name", "email", "123 +0000"), "Name <email>",
+   "ident_person: array");
+
+# objects and hashes
+ok(our $file1hash = $r->command_oneline('rev-parse', "HEAD:file1"), "(get file hash)");
+our $iostring = IO::String->new;
+is($r->cat_blob($file1hash, $iostring), 15, "cat_blob: size");
+is(${$iostring->string_ref}, "changed file 1\n", "cat_blob: data");
+our $tmpfile = File::Temp->new();
+print $tmpfile ${$iostring->string_ref};
+is(Git::hash_object("blob", $tmpfile), $file1hash, "hash_object: roundtrip");
+$tmpfile = File::Temp->new();
+print $tmpfile my $test_text = "test blob, to be inserted\n";
+$tmpfile->close;
+like(our $newhash = $r->hash_and_insert_object($tmpfile), qr/[0-9a-fA-F]{40}/,
+     "hash_and_insert_object: returns hash");
+$iostring = IO::String->new;
+is($r->cat_blob($newhash, $iostring), length $test_text, "cat_blob: roundtrip size");
+is(${$iostring->string_ref}, $test_text, "cat_blob: roundtrip data");
+
+# paths
+is($r->repo_path, "./.git", "repo_path");
+is($r->wc_path, $abs_repo_dir . "/", "wc_path");
+is($r->wc_subdir, "", "wc_subdir initial");
+$r->wc_chdir("directory1");
+is($r->wc_subdir, "directory1", "wc_subdir after wc_chdir");
+TODO: {
+	local $TODO = "commands do not work after wc_chdir";
+	# Failure output is active even in non-verbose mode and thus
+	# annoying.  Hence we skip these tests as long as they fail.
+	todo_skip 'config after wc_chdir', 1;
+	is($r->config("color.string"), "value", "config after wc_chdir");
+}
-- 
1.5.6.rc3.7.ged9620

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v4] Git.pm: add test suite
  2008-06-17  6:59 ` [PATCH 2/2 v4] Git.pm: add test suite Lea Wiemann
@ 2008-06-18  3:16   ` Junio C Hamano
  2008-06-18 18:04     ` Lea Wiemann
  2008-06-18 20:32   ` Olivier Marin
  1 sibling, 1 reply; 13+ messages in thread
From: Junio C Hamano @ 2008-06-18  3:16 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git

Lea Wiemann <lewiemann@gmail.com> writes:

> diff --git a/t/t9700/test.pl b/t/t9700/test.pl
> new file mode 100755
> index 0000000..8318fec
> --- /dev/null
> +++ b/t/t9700/test.pl
> @@ -0,0 +1,99 @@
> +#!/usr/bin/perl
> +use lib (split(/:/, $ENV{GITPERLLIB}));
> +
> +use warnings;
> +use strict;
> +
> +use Test::More qw(no_plan);
> +
> +use Cwd;
> +use File::Basename;
> +use File::Temp;
> +use IO::String;

The system I first tried this did not have IO::String installed.  Is this
something we would want to rely on being available?

It also indicates a slight problem in test_external.  Can it become a bit
easier to tell such a basic problem apart from real test errors?  I needed
to look into /tmp/* to see where it is failing but it would be nice if we
can somehow see the breakage with "sh t9700-*.sh -v".

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v4] Git.pm: add test suite
  2008-06-18  3:16   ` Junio C Hamano
@ 2008-06-18 18:04     ` Lea Wiemann
  2008-06-18 19:40       ` Junio C Hamano
  0 siblings, 1 reply; 13+ messages in thread
From: Lea Wiemann @ 2008-06-18 18:04 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano wrote:
> The system I first tried this did not have IO::String installed.

My bad, I should've checked this before sending it off.  I guess we'll 
solve this in Michael's patch thread; don't expect a reply from me in 
the next 12h though, I'm way tired and utterly unproductive right now.

> [test_external:] Can it become a bit easier to tell such a basic
> problem apart from real test errors?  I needed to look into
> /tmp/* to see where it is failing

Hm, is your test output somehow different from the following?  It states 
the error quite clearly at the bottom.

$ ./t9700-perl-git.sh -v
* expecting success: echo "test file 1" > file1 &&
      echo "test file 2" > file2 &&
      [...]
      git-config --add test.int 2k

*   ok 1: set up test repository
[...]
*  run 2: Perl API (perl ../t9700/test.pl)
* FAIL 2: Perl API
	perl ../t9700/test.pl
* expecting no stderr from previous command
* FAIL 3: no stderr: Perl API
	perl ../t9700/test.pl
	Stderr is:
	Can't locate IO/String.pm in @INC (@INC contains: 
/home/lea/G/t/../perl/blib/lib /home/lea/G/t/../perl/blib/arch/auto/Git 
/home/lea/.perl/lib /etc/perl /usr/local/lib/perl/5.10.0 
/usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 
/usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at 
../t9700/test.pl line 12.
	BEGIN failed--compilation aborted at ../t9700/test.pl line 12.
	# Looks like your test died before it could output anything.
* failed 2 among 3 test(s)

-- Lea

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v4] Git.pm: add test suite
  2008-06-18 18:04     ` Lea Wiemann
@ 2008-06-18 19:40       ` Junio C Hamano
  0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2008-06-18 19:40 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git

Lea Wiemann <lewiemann@gmail.com> writes:

> Junio C Hamano wrote:
>> The system I first tried this did not have IO::String installed.
>
> My bad, I should've checked this before sending it off.  I guess we'll
> solve this in Michael's patch thread; don't expect a reply from me in
> the next 12h though, I'm way tired and utterly unproductive right now.
>
>> [test_external:] Can it become a bit easier to tell such a basic
>> problem apart from real test errors?  I needed to look into
>> /tmp/* to see where it is failing
>
> Hm, is your test output somehow different from the following?  It
> states the error quite clearly at the bottom.
> ...
> * expecting no stderr from previous command
> * FAIL 3: no stderr: Perl API
> 	perl ../t9700/test.pl
> 	Stderr is:
> 	Can't locate IO/String.pm in @INC (@INC contains:
> /home/lea/G/t/../perl/blib/lib
> /home/lea/G/t/../perl/blib/arch/auto/Git /home/lea/.perl/lib /etc/perl
> /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5
> /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10
> /usr/local/lib/site_perl .) at ../t9700/test.pl line 12.
> 	BEGIN failed--compilation aborted at ../t9700/test.pl line 12.
> 	# Looks like your test died before it could output anything.
> * failed 2 among 3 test(s)

Yeah, I do see "Can't locate IO/String.pm".  Thanks.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr
  2008-06-17  6:59 [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Lea Wiemann
  2008-06-17  6:59 ` [PATCH 2/2 v4] Git.pm: add test suite Lea Wiemann
@ 2008-06-18 20:24 ` Olivier Marin
  2008-06-19 18:18   ` [PATCH 1/2 v3] " Lea Wiemann
  1 sibling, 1 reply; 13+ messages in thread
From: Olivier Marin @ 2008-06-18 20:24 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git

Hi,

Lea Wiemann a écrit :
> +# Like test_external, but in addition tests that the command generated
> +# no output on stderr.
> +test_external_without_stderr () {
> +	# The temporary file has no (and must have no) security
> +	# implications.
> +	tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi
> +	stderr="$tmp/git-external-stderr.$$.tmp"
> +	test_external "$@" 4> "$stderr"
> +	[ -f "$stderr" ] || eror "Internal error: $stderr disappeared."

Just a typo here: s/eror/error/

Olivier.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v4] Git.pm: add test suite
  2008-06-17  6:59 ` [PATCH 2/2 v4] Git.pm: add test suite Lea Wiemann
  2008-06-18  3:16   ` Junio C Hamano
@ 2008-06-18 20:32   ` Olivier Marin
  1 sibling, 0 replies; 13+ messages in thread
From: Olivier Marin @ 2008-06-18 20:32 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git

Lea Wiemann a écrit :
> 
> diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
> new file mode 100755
> index 0000000..592d79a
> --- /dev/null
> +++ b/t/t9700-perl-git.sh
> @@ -0,0 +1,39 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2008 Lea Wiemann
> +#
> +
> +test_description='perl interface (Git.pm)'
> +. ./test-lib.sh
> +
> +# set up test repository
> +
> +test_expect_success \
> +    'set up test repository' \
> +    'echo "test file 1" > file1 &&
> +     echo "test file 2" > file2 &&
> +     mkdir directory1 &&
> +     echo "in directory1" >> directory1/file &&
> +     mkdir directory2 &&
> +     echo "in directory2" >> directory2/file &&
> +     git add . &&
> +     git commit -m "first commit" &&
> +
> +     echo "changed file 1" > file1 &&
> +     git commit -a -m "second commit" &&
> +
> +     git-config --add color.test.slot1 green &&
> +     git-config --add test.string value &&
> +     git-config --add test.dupstring value1 &&
> +     git-config --add test.dupstring value2 &

While I was running the whole test suite, your test cases randomly
failed. I did not understand until I see the missing & here. ;-)

Olivier.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/2 v3] t/test-lib.sh: add test_external and test_external_without_stderr
  2008-06-18 20:24 ` [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Olivier Marin
@ 2008-06-19 18:18   ` Lea Wiemann
  2008-06-19 18:18     ` [PATCH 2/2 v5] Git.pm: add test suite Lea Wiemann
  0 siblings, 1 reply; 13+ messages in thread
From: Lea Wiemann @ 2008-06-19 18:18 UTC (permalink / raw)
  To: git; +Cc: Lea Wiemann

This is for running external test scripts in other programming
languages that provide continuous output about their tests.  Using
test_expect_success (like "test_expect_success 'description' 'perl
test-script.pl'") doesn't suffice here because test_expect_success
eats stdout in non-verbose mode, which is not fixable without major
file descriptor trickery.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
---
Olivier Marin wrote:
> Just a typo here: s/eror/error/

Thanks for spotting this, and also the missing ampersand in the other
patch!

(This typo is the only change since v2.)

 t/test-lib.sh |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/t/test-lib.sh b/t/test-lib.sh
index 3ac8755..dc2736e 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -304,6 +304,64 @@ test_expect_code () {
 	echo >&3 ""
 }
 
+# test_external runs external test scripts that provide continuous
+# test output about their progress, and succeeds/fails on
+# zero/non-zero exit code.  It outputs the test output on stdout even
+# in non-verbose mode, and announces the external script with "* run
+# <n>: ..." before running it.  When providing relative paths, keep in
+# mind that all scripts run in "trash directory".
+# Usage: test_external description command arguments...
+# Example: test_external 'Perl API' perl ../path/to/test.pl
+test_external () {
+	test "$#" -eq 3 ||
+	error >&5 "bug in the test script: not 3 parameters to test_external"
+	descr="$1"
+	shift
+	if ! test_skip "$descr" "$@"
+	then
+		# Announce the script to reduce confusion about the
+		# test output that follows.
+		say_color "" " run $(expr "$test_count" + 1): $descr ($*)"
+		# Run command; redirect its stderr to &4 as in
+		# test_run_, but keep its stdout on our stdout even in
+		# non-verbose mode.
+		"$@" 2>&4
+		if [ "$?" = 0 ]
+		then
+			test_ok_ "$descr"
+		else
+			test_failure_ "$descr" "$@"
+		fi
+	fi
+}
+
+# Like test_external, but in addition tests that the command generated
+# no output on stderr.
+test_external_without_stderr () {
+	# The temporary file has no (and must have no) security
+	# implications.
+	tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi
+	stderr="$tmp/git-external-stderr.$$.tmp"
+	test_external "$@" 4> "$stderr"
+	[ -f "$stderr" ] || error "Internal error: $stderr disappeared."
+	descr="no stderr: $1"
+	shift
+	say >&3 "expecting no stderr from previous command"
+	if [ ! -s "$stderr" ]; then
+		rm "$stderr"
+		test_ok_ "$descr"
+	else
+		if [ "$verbose" = t ]; then
+			output=`echo; echo Stderr is:; cat "$stderr"`
+		else
+			output=
+		fi
+		# rm first in case test_failure exits.
+		rm "$stderr"
+		test_failure_ "$descr" "$@" "$output"
+	fi
+}
+
 # This is not among top-level (test_expect_success | test_expect_failure)
 # but is a prefix that can be used in the test script, like:
 #
-- 
1.5.6.149.g06c04.dirty

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/2 v5] Git.pm: add test suite
  2008-06-19 18:18   ` [PATCH 1/2 v3] " Lea Wiemann
@ 2008-06-19 18:18     ` Lea Wiemann
  2008-06-19 20:32       ` Lea Wiemann
  0 siblings, 1 reply; 13+ messages in thread
From: Lea Wiemann @ 2008-06-19 18:18 UTC (permalink / raw)
  To: git; +Cc: Lea Wiemann

Add a shell script (t/t9700-perl-git.sh) that sets up a git repository
and a perl script (t/t9700/test.pl) that runs the actual tests.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
---
Changes since v4:

- Added missing ampersand (thanks Olivier!).
- Use 5.006002 (lowest possible version for Test::More).
- Use File::Temp instead of the external IO::String.

Tested with Perl 5.6, 5.8, 5.10.  Diff against v4 of this patch:

index 592d79a..b2fb9ec 100755
--- a/t/t9700-perl-git.sh
+++ b/t/t9700-perl-git.sh
@@ -25,7 +25,7 @@ test_expect_success \
      git-config --add color.test.slot1 green &&
      git-config --add test.string value &&
      git-config --add test.dupstring value1 &&
-     git-config --add test.dupstring value2 &
+     git-config --add test.dupstring value2 &&
      git-config --add test.booltrue true &&
      git-config --add test.boolfalse no &&
      git-config --add test.boolother other &&
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
index 8318fec..4d23125 100755
--- a/t/t9700/test.pl
+++ b/t/t9700/test.pl
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 use lib (split(/:/, $ENV{GITPERLLIB}));
 
+use 5.006002;  # Test::More was introduced in 5.6.2
 use warnings;
 use strict;
 
@@ -9,7 +10,6 @@ use Test::More qw(no_plan);
 use Cwd;
 use File::Basename;
 use File::Temp;
-use IO::String;
 
 BEGIN { use_ok('Git') }
 
@@ -69,20 +69,21 @@ is($r->ident_person("Name", "email", "123 +0000"), "Name <email>",
 
 # objects and hashes
 ok(our $file1hash = $r->command_oneline('rev-parse', "HEAD:file1"), "(get file hash)");
-our $iostring = IO::String->new;
-is($r->cat_blob($file1hash, $iostring), 15, "cat_blob: size");
-is(${$iostring->string_ref}, "changed file 1\n", "cat_blob: data");
-our $tmpfile = File::Temp->new();
-print $tmpfile ${$iostring->string_ref};
+our $tmpfile = File::Temp->new;
+is($r->cat_blob($file1hash, $tmpfile), 15, "cat_blob: size");
+our $blobcontents;
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, "changed file 1\n", "cat_blob: data");
+seek $tmpfile, 0, 0;
 is(Git::hash_object("blob", $tmpfile), $file1hash, "hash_object: roundtrip");
 $tmpfile = File::Temp->new();
 print $tmpfile my $test_text = "test blob, to be inserted\n";
-$tmpfile->close;
 like(our $newhash = $r->hash_and_insert_object($tmpfile), qr/[0-9a-fA-F]{40}/,
      "hash_and_insert_object: returns hash");
-$iostring = IO::String->new;
-is($r->cat_blob($newhash, $iostring), length $test_text, "cat_blob: roundtrip size");
-is(${$iostring->string_ref}, $test_text, "cat_blob: roundtrip data");
+$tmpfile = File::Temp->new;
+is($r->cat_blob($newhash, $tmpfile), length $test_text, "cat_blob: roundtrip size");
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, $test_text, "cat_blob: roundtrip data");
 
 # paths
 is($r->repo_path, "./.git", "repo_path");





 t/t9700-perl-git.sh |   39 ++++++++++++++++++++
 t/t9700/test.pl     |  100 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+), 0 deletions(-)
 create mode 100755 t/t9700-perl-git.sh
 create mode 100755 t/t9700/test.pl

diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
new file mode 100755
index 0000000..b2fb9ec
--- /dev/null
+++ b/t/t9700-perl-git.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Lea Wiemann
+#
+
+test_description='perl interface (Git.pm)'
+. ./test-lib.sh
+
+# set up test repository
+
+test_expect_success \
+    'set up test repository' \
+    'echo "test file 1" > file1 &&
+     echo "test file 2" > file2 &&
+     mkdir directory1 &&
+     echo "in directory1" >> directory1/file &&
+     mkdir directory2 &&
+     echo "in directory2" >> directory2/file &&
+     git add . &&
+     git commit -m "first commit" &&
+
+     echo "changed file 1" > file1 &&
+     git commit -a -m "second commit" &&
+
+     git-config --add color.test.slot1 green &&
+     git-config --add test.string value &&
+     git-config --add test.dupstring value1 &&
+     git-config --add test.dupstring value2 &&
+     git-config --add test.booltrue true &&
+     git-config --add test.boolfalse no &&
+     git-config --add test.boolother other &&
+     git-config --add test.int 2k
+     '
+
+test_external_without_stderr \
+    'Perl API' \
+    perl ../t9700/test.pl
+
+test_done
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
new file mode 100755
index 0000000..4d23125
--- /dev/null
+++ b/t/t9700/test.pl
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+use lib (split(/:/, $ENV{GITPERLLIB}));
+
+use 5.006002;
+use warnings;
+use strict;
+
+use Test::More qw(no_plan);
+
+use Cwd;
+use File::Basename;
+use File::Temp;
+
+BEGIN { use_ok('Git') }
+
+# set up
+our $repo_dir = "trash directory";
+our $abs_repo_dir = Cwd->cwd;
+die "this must be run by calling the t/t97* shell script(s)\n"
+    if basename(Cwd->cwd) ne $repo_dir;
+ok(our $r = Git->repository(Directory => "."), "open repository");
+
+# config
+is($r->config("test.string"), "value", "config scalar: string");
+is_deeply([$r->config("test.dupstring")], ["value1", "value2"],
+	  "config array: string");
+is($r->config("test.nonexistent"), undef, "config scalar: nonexistent");
+is_deeply([$r->config("test.nonexistent")], [], "config array: nonexistent");
+is($r->config_int("test.int"), 2048, "config_int: integer");
+is($r->config_int("test.nonexistent"), undef, "config_int: nonexistent");
+ok($r->config_bool("test.booltrue"), "config_bool: true");
+ok(!$r->config_bool("test.boolfalse"), "config_bool: false");
+our $ansi_green = "\x1b[32m";
+is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color");
+# Cannot test $r->get_colorbool("color.foo")) because we do not
+# control whether our STDOUT is a terminal.
+
+# Failure cases for config:
+# Save and restore STDERR; we will probably extract this into a
+# "dies_ok" method and possibly move the STDERR handling to Git.pm.
+open our $tmpstderr, ">&", STDERR or die "cannot save STDERR"; close STDERR;
+eval { $r->config("test.dupstring") };
+ok($@, "config: duplicate entry in scalar context fails");
+eval { $r->config_bool("test.boolother") };
+ok($@, "config_bool: non-boolean values fail");
+open STDERR, ">&", $tmpstderr or die "cannot restore STDERR";
+
+# ident
+like($r->ident("aUthor"), qr/^A U Thor <author\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: author (type)");
+like($r->ident("cOmmitter"), qr/^C O Mitter <committer\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: committer (type)");
+is($r->ident("invalid"), "invalid", "ident scalar: invalid ident string (no parsing)");
+my ($name, $email, $time_tz) = $r->ident('author');
+is_deeply([$name, $email], ["A U Thor", "author\@example.com"],
+	 "ident array: author");
+like($time_tz, qr/[0-9]+ \+0000/, "ident array: author");
+is_deeply([$r->ident("Name <email> 123 +0000")], ["Name", "email", "123 +0000"],
+	  "ident array: ident string");
+is_deeply([$r->ident("invalid")], [], "ident array: invalid ident string");
+
+# ident_person
+is($r->ident_person("aUthor"), "A U Thor <author\@example.com>",
+   "ident_person: author (type)");
+is($r->ident_person("Name <email> 123 +0000"), "Name <email>",
+   "ident_person: ident string");
+is($r->ident_person("Name", "email", "123 +0000"), "Name <email>",
+   "ident_person: array");
+
+# objects and hashes
+ok(our $file1hash = $r->command_oneline('rev-parse', "HEAD:file1"), "(get file hash)");
+our $tmpfile = File::Temp->new;
+is($r->cat_blob($file1hash, $tmpfile), 15, "cat_blob: size");
+our $blobcontents;
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, "changed file 1\n", "cat_blob: data");
+seek $tmpfile, 0, 0;
+is(Git::hash_object("blob", $tmpfile), $file1hash, "hash_object: roundtrip");
+$tmpfile = File::Temp->new();
+print $tmpfile my $test_text = "test blob, to be inserted\n";
+like(our $newhash = $r->hash_and_insert_object($tmpfile), qr/[0-9a-fA-F]{40}/,
+     "hash_and_insert_object: returns hash");
+$tmpfile = File::Temp->new;
+is($r->cat_blob($newhash, $tmpfile), length $test_text, "cat_blob: roundtrip size");
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, $test_text, "cat_blob: roundtrip data");
+
+# paths
+is($r->repo_path, "./.git", "repo_path");
+is($r->wc_path, $abs_repo_dir . "/", "wc_path");
+is($r->wc_subdir, "", "wc_subdir initial");
+$r->wc_chdir("directory1");
+is($r->wc_subdir, "directory1", "wc_subdir after wc_chdir");
+TODO: {
+	local $TODO = "commands do not work after wc_chdir";
+	# Failure output is active even in non-verbose mode and thus
+	# annoying.  Hence we skip these tests as long as they fail.
+	todo_skip 'config after wc_chdir', 1;
+	is($r->config("color.string"), "value", "config after wc_chdir");
+}
-- 
1.5.6.149.g06c04.dirty

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/2 v5] Git.pm: add test suite
  2008-06-19 18:18     ` [PATCH 2/2 v5] Git.pm: add test suite Lea Wiemann
@ 2008-06-19 20:32       ` Lea Wiemann
  2008-06-19 20:53         ` Jakub Narebski
  2008-06-19 23:55         ` Junio C Hamano
  0 siblings, 2 replies; 13+ messages in thread
From: Lea Wiemann @ 2008-06-19 20:32 UTC (permalink / raw)
  To: git; +Cc: Lea Wiemann

Add a shell script (t/t9700-perl-git.sh) that sets up a git repository
and a perl script (t/t9700/test.pl) that runs the actual tests.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
---
[Resent with fixed diff to v4 so git-am doesn't get confused. ;-)]

Changes since v4:

- Added missing ampersand (thanks Olivier!).
- Use 5.006002 (lowest possible version for Test::More).
- Use File::Temp instead of the external IO::String.

Tested with Perl 5.6, 5.8, 5.10.  Diff against v4 of this patch:

    index 592d79a..b2fb9ec 100755
    --- a/t/t9700-perl-git.sh
    +++ b/t/t9700-perl-git.sh
    @@ -25,7 +25,7 @@ test_expect_success \
          git-config --add color.test.slot1 green &&
          git-config --add test.string value &&
          git-config --add test.dupstring value1 &&
    -     git-config --add test.dupstring value2 &
    +     git-config --add test.dupstring value2 &&
          git-config --add test.booltrue true &&
          git-config --add test.boolfalse no &&
          git-config --add test.boolother other &&
    diff --git a/t/t9700/test.pl b/t/t9700/test.pl
    index 8318fec..4d23125 100755
    --- a/t/t9700/test.pl
    +++ b/t/t9700/test.pl
    @@ -1,6 +1,7 @@
     #!/usr/bin/perl
     use lib (split(/:/, $ENV{GITPERLLIB}));

    +use 5.006002;  # Test::More was introduced in 5.6.2
     use warnings;
     use strict;

    @@ -9,7 +10,6 @@ use Test::More qw(no_plan);
     use Cwd;
     use File::Basename;
     use File::Temp;
    -use IO::String;

     BEGIN { use_ok('Git') }

    @@ -69,20 +69,21 @@ is($r->ident_person("Name", "email", "123 +0000"), "Name <email>",

     # objects and hashes
     ok(our $file1hash = $r->command_oneline('rev-parse', "HEAD:file1"), "(get file hash)");
    -our $iostring = IO::String->new;
    -is($r->cat_blob($file1hash, $iostring), 15, "cat_blob: size");
    -is(${$iostring->string_ref}, "changed file 1\n", "cat_blob: data");
    -our $tmpfile = File::Temp->new();
    -print $tmpfile ${$iostring->string_ref};
    +our $tmpfile = File::Temp->new;
    +is($r->cat_blob($file1hash, $tmpfile), 15, "cat_blob: size");
    +our $blobcontents;
    +{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
    +is($blobcontents, "changed file 1\n", "cat_blob: data");
    +seek $tmpfile, 0, 0;
     is(Git::hash_object("blob", $tmpfile), $file1hash, "hash_object: roundtrip");
     $tmpfile = File::Temp->new();
     print $tmpfile my $test_text = "test blob, to be inserted\n";
    -$tmpfile->close;
     like(our $newhash = $r->hash_and_insert_object($tmpfile), qr/[0-9a-fA-F]{40}/,
          "hash_and_insert_object: returns hash");
    -$iostring = IO::String->new;
    -is($r->cat_blob($newhash, $iostring), length $test_text, "cat_blob: roundtrip size");
    -is(${$iostring->string_ref}, $test_text, "cat_blob: roundtrip data");
    +$tmpfile = File::Temp->new;
    +is($r->cat_blob($newhash, $tmpfile), length $test_text, "cat_blob: roundtrip size");
    +{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
    +is($blobcontents, $test_text, "cat_blob: roundtrip data");

     # paths
     is($r->repo_path, "./.git", "repo_path");



 t/t9700-perl-git.sh |   39 ++++++++++++++++++++
 t/t9700/test.pl     |  100 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+), 0 deletions(-)
 create mode 100755 t/t9700-perl-git.sh
 create mode 100755 t/t9700/test.pl

diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh
new file mode 100755
index 0000000..b2fb9ec
--- /dev/null
+++ b/t/t9700-perl-git.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Lea Wiemann
+#
+
+test_description='perl interface (Git.pm)'
+. ./test-lib.sh
+
+# set up test repository
+
+test_expect_success \
+    'set up test repository' \
+    'echo "test file 1" > file1 &&
+     echo "test file 2" > file2 &&
+     mkdir directory1 &&
+     echo "in directory1" >> directory1/file &&
+     mkdir directory2 &&
+     echo "in directory2" >> directory2/file &&
+     git add . &&
+     git commit -m "first commit" &&
+
+     echo "changed file 1" > file1 &&
+     git commit -a -m "second commit" &&
+
+     git-config --add color.test.slot1 green &&
+     git-config --add test.string value &&
+     git-config --add test.dupstring value1 &&
+     git-config --add test.dupstring value2 &&
+     git-config --add test.booltrue true &&
+     git-config --add test.boolfalse no &&
+     git-config --add test.boolother other &&
+     git-config --add test.int 2k
+     '
+
+test_external_without_stderr \
+    'Perl API' \
+    perl ../t9700/test.pl
+
+test_done
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
new file mode 100755
index 0000000..4d23125
--- /dev/null
+++ b/t/t9700/test.pl
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+use lib (split(/:/, $ENV{GITPERLLIB}));
+
+use 5.006002;
+use warnings;
+use strict;
+
+use Test::More qw(no_plan);
+
+use Cwd;
+use File::Basename;
+use File::Temp;
+
+BEGIN { use_ok('Git') }
+
+# set up
+our $repo_dir = "trash directory";
+our $abs_repo_dir = Cwd->cwd;
+die "this must be run by calling the t/t97* shell script(s)\n"
+    if basename(Cwd->cwd) ne $repo_dir;
+ok(our $r = Git->repository(Directory => "."), "open repository");
+
+# config
+is($r->config("test.string"), "value", "config scalar: string");
+is_deeply([$r->config("test.dupstring")], ["value1", "value2"],
+	  "config array: string");
+is($r->config("test.nonexistent"), undef, "config scalar: nonexistent");
+is_deeply([$r->config("test.nonexistent")], [], "config array: nonexistent");
+is($r->config_int("test.int"), 2048, "config_int: integer");
+is($r->config_int("test.nonexistent"), undef, "config_int: nonexistent");
+ok($r->config_bool("test.booltrue"), "config_bool: true");
+ok(!$r->config_bool("test.boolfalse"), "config_bool: false");
+our $ansi_green = "\x1b[32m";
+is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color");
+# Cannot test $r->get_colorbool("color.foo")) because we do not
+# control whether our STDOUT is a terminal.
+
+# Failure cases for config:
+# Save and restore STDERR; we will probably extract this into a
+# "dies_ok" method and possibly move the STDERR handling to Git.pm.
+open our $tmpstderr, ">&", STDERR or die "cannot save STDERR"; close STDERR;
+eval { $r->config("test.dupstring") };
+ok($@, "config: duplicate entry in scalar context fails");
+eval { $r->config_bool("test.boolother") };
+ok($@, "config_bool: non-boolean values fail");
+open STDERR, ">&", $tmpstderr or die "cannot restore STDERR";
+
+# ident
+like($r->ident("aUthor"), qr/^A U Thor <author\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: author (type)");
+like($r->ident("cOmmitter"), qr/^C O Mitter <committer\@example.com> [0-9]+ \+0000$/,
+     "ident scalar: committer (type)");
+is($r->ident("invalid"), "invalid", "ident scalar: invalid ident string (no parsing)");
+my ($name, $email, $time_tz) = $r->ident('author');
+is_deeply([$name, $email], ["A U Thor", "author\@example.com"],
+	 "ident array: author");
+like($time_tz, qr/[0-9]+ \+0000/, "ident array: author");
+is_deeply([$r->ident("Name <email> 123 +0000")], ["Name", "email", "123 +0000"],
+	  "ident array: ident string");
+is_deeply([$r->ident("invalid")], [], "ident array: invalid ident string");
+
+# ident_person
+is($r->ident_person("aUthor"), "A U Thor <author\@example.com>",
+   "ident_person: author (type)");
+is($r->ident_person("Name <email> 123 +0000"), "Name <email>",
+   "ident_person: ident string");
+is($r->ident_person("Name", "email", "123 +0000"), "Name <email>",
+   "ident_person: array");
+
+# objects and hashes
+ok(our $file1hash = $r->command_oneline('rev-parse', "HEAD:file1"), "(get file hash)");
+our $tmpfile = File::Temp->new;
+is($r->cat_blob($file1hash, $tmpfile), 15, "cat_blob: size");
+our $blobcontents;
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, "changed file 1\n", "cat_blob: data");
+seek $tmpfile, 0, 0;
+is(Git::hash_object("blob", $tmpfile), $file1hash, "hash_object: roundtrip");
+$tmpfile = File::Temp->new();
+print $tmpfile my $test_text = "test blob, to be inserted\n";
+like(our $newhash = $r->hash_and_insert_object($tmpfile), qr/[0-9a-fA-F]{40}/,
+     "hash_and_insert_object: returns hash");
+$tmpfile = File::Temp->new;
+is($r->cat_blob($newhash, $tmpfile), length $test_text, "cat_blob: roundtrip size");
+{ local $/; seek $tmpfile, 0, 0; $blobcontents = <$tmpfile>; }
+is($blobcontents, $test_text, "cat_blob: roundtrip data");
+
+# paths
+is($r->repo_path, "./.git", "repo_path");
+is($r->wc_path, $abs_repo_dir . "/", "wc_path");
+is($r->wc_subdir, "", "wc_subdir initial");
+$r->wc_chdir("directory1");
+is($r->wc_subdir, "directory1", "wc_subdir after wc_chdir");
+TODO: {
+	local $TODO = "commands do not work after wc_chdir";
+	# Failure output is active even in non-verbose mode and thus
+	# annoying.  Hence we skip these tests as long as they fail.
+	todo_skip 'config after wc_chdir', 1;
+	is($r->config("color.string"), "value", "config after wc_chdir");
+}
-- 
1.5.6.149.g06c04.dirty

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v5] Git.pm: add test suite
  2008-06-19 20:32       ` Lea Wiemann
@ 2008-06-19 20:53         ` Jakub Narebski
  2008-06-19 20:55           ` Lea Wiemann
  2008-06-19 23:55         ` Junio C Hamano
  1 sibling, 1 reply; 13+ messages in thread
From: Jakub Narebski @ 2008-06-19 20:53 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git, Lea Wiemann

Lea Wiemann <lewiemann@gmail.com> writes:

> Changes since v4:
> 
> - Use 5.006002 (lowest possible version for Test::More).

[...]
>      #!/usr/bin/perl
>      use lib (split(/:/, $ENV{GITPERLLIB}));
> 
>     +use 5.006002;  # Test::More was introduced in 5.6.2

Isn't "use Test::More" enough, so this line is not strictly
necessary?

-- 
Jakub Narebski
Poland
ShadeHawk on #git

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v5] Git.pm: add test suite
  2008-06-19 20:53         ` Jakub Narebski
@ 2008-06-19 20:55           ` Lea Wiemann
  0 siblings, 0 replies; 13+ messages in thread
From: Lea Wiemann @ 2008-06-19 20:55 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git

Jakub Narebski wrote:
> Lea Wiemann <lewiemann@gmail.com> writes:
>>     +use 5.006002;  # Test::More was introduced in 5.6.2
> 
> Isn't "use Test::More" enough, so this line is not strictly
> necessary?

I'd prefer to have a 'wrong Perl version' error instead of 'module not 
found'.  Also it's good to document what we support, to remind me that I 
have to run it with perl5.6.

-- Lea

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2 v5] Git.pm: add test suite
  2008-06-19 20:32       ` Lea Wiemann
  2008-06-19 20:53         ` Jakub Narebski
@ 2008-06-19 23:55         ` Junio C Hamano
  1 sibling, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2008-06-19 23:55 UTC (permalink / raw)
  To: Lea Wiemann; +Cc: git, Jakub Narebski

Thanks.

These two Perl-ish test patches will be part of 'next' tonight.

When sending further improvements, if necessary, please make them relative
to the copy there.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2008-06-19 23:56 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-17  6:59 [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Lea Wiemann
2008-06-17  6:59 ` [PATCH 2/2 v4] Git.pm: add test suite Lea Wiemann
2008-06-18  3:16   ` Junio C Hamano
2008-06-18 18:04     ` Lea Wiemann
2008-06-18 19:40       ` Junio C Hamano
2008-06-18 20:32   ` Olivier Marin
2008-06-18 20:24 ` [PATCH 1/2 v2] t/test-lib.sh: add test_external and test_external_without_stderr Olivier Marin
2008-06-19 18:18   ` [PATCH 1/2 v3] " Lea Wiemann
2008-06-19 18:18     ` [PATCH 2/2 v5] Git.pm: add test suite Lea Wiemann
2008-06-19 20:32       ` Lea Wiemann
2008-06-19 20:53         ` Jakub Narebski
2008-06-19 20:55           ` Lea Wiemann
2008-06-19 23:55         ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).