]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
t/git.t: add tests for detecting failures
authorEric Wong <e@80x24.org>
Tue, 5 Jan 2016 11:09:38 +0000 (11:09 +0000)
committerEric Wong <e@80x24.org>
Tue, 5 Apr 2016 18:58:27 +0000 (18:58 +0000)
We need to ensure failure detection works.

t/git.t

diff --git a/t/git.t b/t/git.t
index d7b20d0deebf4567acd22d57a2c3521c1da3c249..e09a4d0113c1100d2434d093c8de80960d276a5d 100644 (file)
--- a/t/git.t
+++ b/t/git.t
@@ -139,4 +139,29 @@ if (1) {
        ok($nl > 1, "qx returned array length of $nl");
 }
 
+{
+       my $git = PublicInbox::Git->new($dir);
+       open my $tmperr, '>&', \*STDERR or die "dup stderr failed: $!\n";
+
+       open STDERR, '>', '/dev/null' or die "redirect stderr failed: $!\n";
+       my $err = $git->popen(qw(cat-file blob non-existent));
+       my @out = <$err>;
+       my $close_ret = close $err;
+       my $close_err = $?;
+       open STDERR, '>&', $tmperr or die "restore stderr failed: $!\n";
+       is(join('', @out), '', 'no output on stdout on error');
+       isnt($close_err, 0, 'close set $? on bad command');
+       ok(!$close_ret, 'close returned error on bad command');
+
+       open STDERR, '>', '/dev/null' or die "redirect stderr failed: $!\n";
+       $err = $git->popen(qw(tag -l));
+       @out = <$err>;
+       $close_ret = close $err;
+       $close_err = $?;
+       open STDERR, '>&', $tmperr or die "restore stderr failed: $!\n";
+       is(join('', @out), '', 'no output on stdout on error');
+       ok(!$close_err, 'close clobbered $? on empty output');
+       ok($close_ret, 'close returned error on empty output');
+}
+
 done_testing();