git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Lea Wiemann <lewiemann@gmail.com>
To: git@vger.kernel.org
Cc: pasky@suse.cz, Lea Wiemann <LeWiemann@gmail.com>
Subject: [RFC/PATCH] test suite for Git.pm
Date: Sun,  1 Jun 2008 05:51:09 +0200	[thread overview]
Message-ID: <1212292269-21534-1-git-send-email-LeWiemann@gmail.com> (raw)

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

             reply	other threads:[~2008-06-01  3:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-01  3:51 Lea Wiemann [this message]
2008-06-01  5:03 ` [RFC/PATCH] test suite for Git.pm Lea Wiemann
2008-06-01 22:41 ` [RFC/PATCH v2] " Lea Wiemann
2008-06-01 23:30   ` [RFC/PATCH v3] " Lea Wiemann

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=1212292269-21534-1-git-send-email-LeWiemann@gmail.com \
    --to=lewiemann@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=pasky@suse.cz \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).