use File::Spec::Functions qw/catdir catfile/;
use File::Temp qw/tempfile tempdir/;
-use Test::More tests => 2 + 3 * 1;
+use Test::More tests => 2 + 2 * 4 + 12 * (3 + 1 + 3 + 6);
+use App::Rgit::Utils qw/:codes/;
use App::Rgit;
sub build {
my $tmpdir = tempdir(CLEANUP => 1);
my $cwd = cwd;
chdir $tmpdir or die "chdir($tmpdir): $!";
-my @expected = sort { $a->[0] cmp $b->[0] } build({
+my @expected = sort { $a->[1] cmp $b->[1] } build({
x => {
a => {
_ => repo('a', 0),
},
z => {
'.git' => {
- HEAD => 1
+ refs => { dummy => 1 },
}
}
},
},
't' => {
't.git' => {
- HEAD => 1,
refs => { dummy => 1 },
+ objects => { dummy => 1 },
}
}
},
@$_,
map({ catdir($tmpdir, $_) } @{$_}[1 .. 3]),
$tmpdir,
- '^n'
+ '%n', '%x'
], @expected;
-for my $cmd (qw/commit/) {
+sub try {
+ my ($cmd, $exp, $policy) = @_;
my ($fh, $filename) = tempfile(UNLINK => 1);
my $ar = App::Rgit->new(
- git => abs_path('t/bin/git'),
- root => $tmpdir,
- cmd => $cmd,
- args => [ abs_path($filename), $cmd, qw/^n ^g ^w ^b ^G ^W ^B ^R ^^n/ ]
+ git => abs_path('t/bin/git'),
+ root => $tmpdir,
+ cmd => $cmd,
+ args => [ abs_path($filename), $cmd, qw/%n %g %w %b %G %W %B %R %%n %x/ ],
+ policy => $policy,
);
isnt($ar, undef, "each $cmd has a defined object");
- my $exit = $ar->run;
- is($exit, 0, "each $cmd returned 0");
- my @lines = sort split /\n/, do { local $/; <$fh> };
+ my $exit;
+ my $fail = $cmd eq 'FAIL' ? 1 : 0;
+ if ($fail) {
+ ($exit, undef) = $ar->run;
+ } else {
+ $exit = $ar->run;
+ }
+ is($exit, $fail, "each $cmd returned $fail");
+ my @lines = split /\n/, do { local $/; <$fh> };
my $res = [ map [ split /\|/, $_ ], @lines ];
- my $exp = [ map [ $cmd, @$_ ], @expected ];
- is_deeply($res, $exp, "each $cmd did the right thing");
+ $exp = [ map [ $cmd, @$_ ], @$exp ];
+ for my $i (0 .. $#$exp) {
+ my $e = $exp->[$i];
+ my $r = shift @$res;
+ isnt($r, undef, "each $cmd visited repository $i");
+SKIP:
+ {
+ skip 'didn\'t visited that repo' => 10 unless defined $r;
+ s/[\r\n]*$// for @$r;
+ is($r->[$_], $e->[$_], "each $cmd argument $_ for repository $i is ok")
+ for 0 .. 10;
+ }
+ }
}
+
+try 'commit', [ @expected ];
+try 'FAIL', [ $expected[0] ];
+try 'FAIL', [ @expected ],
+ sub { NEXT | SAVE };
+my $c = 0;
+try 'FAIL', [ map { ($expected[$_]) x 2 } 0 .. $#expected ],
+ sub { my $ret = $c ? undef : REDO; $c = 1 - $c; $ret };