public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
* [RFC/PATCH] test suite for Git.pm
@ 2008-06-01  3:51 Lea Wiemann
  2008-06-01  5:03 ` Lea Wiemann
  2008-06-01 22:41 ` [RFC/PATCH v2] " Lea Wiemann
  0 siblings, 2 replies; 4+ messages in thread
From: Lea Wiemann @ 2008-06-01  3:51 UTC (permalink / raw)
  To: git; +Cc: pasky, Lea Wiemann

Added 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>
---
Hi everyone!

Here's my first draft for a test suite for Git.pm.  It doesn't test
all of Git.pm yet, but I'll add more tests later.  Comments are
appreciated!

My test-fu didn't suffice for testing the command methods (which are
responsible for calling git), and I'm not currently planning to.  I'm
hoping to add more coverage to the constructor (Git->repository)
though.

Something I'm not sure about yet is how to test failure cases -- for
instance, there are a couple of methods in Git.pm that return undef
for $E->value (i.e. exit code) == 1, but die for $E->value > 1.  The
latter case I can't currently test.  Ideas how to test those cases
cleanly (i.e. how to simulate/mock an exit code > 1) are very welcome.

(Petr:) There's some serious strangeness going on where calling
wc_chdir causes all subsequent commands to fail (marked as TODO at the
end).  I've spent half an hour unsuccessfully trying to track down the
error.  It would be great if you (or anyone else with more Git
experience than me) could have a look at this.

-- Lea


 t/t9700-perl-git.sh |   40 +++++++++++++++++++++++++++++
 t/t9700/test.pl     |   70 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 110 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..735ada1
--- /dev/null
+++ b/t/t9700-perl-git.sh
@@ -0,0 +1,40 @@
+#!/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" > .gitignore &&
+
+     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" &&
+     git rev-parse HEAD > revisions.test &&
+
+     git tag -- --silly-name &&
+
+     echo "changed file 1" > file1 &&
+     git add . &&
+     git commit -m "second commit" &&
+     git rev-parse HEAD >> revisions.test &&
+
+     git-config --add color.test.slot1 green &&
+     (git-config --get-color color.test.slot1 red; echo foo) > x
+     '
+
+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..c8d5c64
--- /dev/null
+++ b/t/t9700/test.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use Test::More qw(no_plan);
+use Cwd;
+use File::Basename;
+
+BEGIN { use_ok('Git') }
+require_ok('Git');
+
+# set up
+#our $repo_dir = "trash directory";
+our $abs_repo_dir = Cwd->cwd;
+ok(our $r = Git->repository(Directory => "."), "open repository");
+ok((open REVISIONS, 'revisions.test' and chomp(our @revisions = <REVISIONS>)),
+   "(read revisions)");
+
+# 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");
+
+# parse_rev
+is($r->parse_rev("HEAD"), $revisions[-1], "parse_rev: 'HEAD'");
+is($r->parse_rev("HEAD^"), $revisions[-2], "parse_rev: 'HEAD^'");
+is($r->parse_rev($revisions[0]), $revisions[0], "parse_rev: SHA1");
+is($r->parse_rev("--silly-name"), $revisions[0], "parse_rev: tag");
+is($r->parse_rev("nonexistent"), undef, "parse_rev: nonexistent name");
+is($r->parse_rev("0" x 40), "0" x 40, "parse_rev: nonexistent SHA1");
+
+# colors
+our $ansi_green = "\x1b[32m";
+# Cannot test $r->get_colorbool("color.foo")) since our stdout is not
+# a terminal.
+
+# paths
+is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color");
+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 when in non-verbose mode and
+	# thus annoying, and the ANSI codes mess up the output on top
+	# of that.  Thus we simply skip these tests while they fail.
+	todo_skip 'get_color after wc_chdir', 2;
+	is($r->get_color("color.test.slot1", "red"), $ansi_green, "get_color after wc_chdir");
+	is($r->parse_rev("HEAD"), $revisions[-1], "parse_rev after wc_chdir");
+}
+
-- 
1.5.5.GIT

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

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

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-01  3:51 [RFC/PATCH] test suite for Git.pm Lea Wiemann
2008-06-01  5:03 ` Lea Wiemann
2008-06-01 22:41 ` [RFC/PATCH v2] " Lea Wiemann
2008-06-01 23:30   ` [RFC/PATCH v3] " Lea Wiemann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox