Analizo
view release on metacpan or search on metacpan
t/Analizo/Batch/Job/Git.t view on Meta::CPAN
isnt($job->{actual_directory}, $TESTDIR);
ok(-d $job->{actual_directory}, "different work directory must be created");
ok(-d File::Spec->catfile($job->{actual_directory}, '.git'), "content must be copied");
$job->parallel_cleanup();
ok(! -d $job->{actual_directory}, "different work directory must be removed when parallel_cleanup is called.");
is($job->project_name, basename($TESTDIR), 'parallelism support must not mess with project name');
}
sub prepare_and_cleanup : Tests {
my $job = mock(__find($SOME_COMMIT));
my @checkouts = ();
$job->mock('git_checkout', sub { push @checkouts, $_[1]; } );
my $oldcwd = getcwd();
$job->prepare();
my $newcwd = getcwd();
$job->cleanup();
ok($newcwd ne $oldcwd, 'prepare must change dir');
ok(getcwd eq $oldcwd, 'cleanup must change cwd back');
is_deeply(\@checkouts, [$SOME_COMMIT, 'main'], 'cleanup must checkout given commit and go back to previous one');
}
sub git_checkout_should_actually_checkout : Tests {
my $job = __find($SOME_COMMIT);
my $getHEAD = sub {
my $commit = `git log --format=%H | head -n 1`; chomp($commit);
return $commit;
};
my $main1 = on_dir($TESTDIR, $getHEAD);
$job->prepare();
my $commit = on_dir($TESTDIR, $getHEAD);
$job->cleanup();
my $main2 = on_dir($TESTDIR, $getHEAD);
my $branch = on_dir($TESTDIR, sub { $job->git_current_branch() });
is($commit, $SOME_COMMIT);
is($main1, $main2);
is($main2, $MAIN);
is($branch, 'main');
}
sub must_NOT_keep_a_reference_to_batch : Tests {
my $batch = __get_repo();
my $job = __find();
$job->batch($batch);
ok(!exists($job->{batch}));
}
sub changed_files : Tests {
my $repo = __get_repo();
my $main = $repo->find($MAIN);
is_deeply($main->changed_files, {'input.cc' => 'M'});
my $some_commit = $repo->find($SOME_COMMIT);
is_deeply($some_commit->changed_files, {'prog.cc' => 'M'});
my $add_output_commit = $repo->find($ADD_OUTPUT_COMMIT);
is_deeply($add_output_commit->changed_files, { 'output.cc' => 'A', 'output.h' => 'A', 'prog.cc' => 'M' });
my $relevant_merge_commit = $repo->find($RELEVANT_MERGE);
is_deeply($relevant_merge_commit->changed_files, { 'prog.cc' => 'MM' });
}
sub previous_relevant : Tests {
my $batch = __get_repo();
my $first = $batch->find($FIRST_COMMIT);
is($first->previous_relevant, undef);
my $main = $batch->find($MAIN);
is($main->previous_relevant, '0a06a6fcc2e7b4fe56d134e89d74ad028bb122ed');
my $commit = $batch->find('0a06a6fcc2e7b4fe56d134e89d74ad028bb122ed');
is($commit->previous_relevant, 'eb67c27055293e835049b58d7d73ce3664d3f90e');
}
sub previous_relevant_with_parent_without_previous_relevant : Tests {
my $repo = __get_repo('foo');
my $job = $repo->find('874073a5a36004cf26794a7ff2eacf496f29b786');
is($job->previous_relevant, undef, 'must return undef as previous_relevant when parent is a merge commit without any previous relevant commits');
}
sub relevant_merge : Tests {
my $batch = __get_repo();
my $relevant_merge = $batch->find($RELEVANT_MERGE);
ok($relevant_merge->relevant());
}
sub previous_wanted : Tests {
my $batch = __get_repo();
my $main = $batch->find($MAIN);
is($main->previous_wanted, $main->previous_relevant);
my $merge = $batch->find($MERGE_COMMIT);
is($merge->previous_wanted, undef);
}
sub metadata : Tests {
my $repo = __get_repo();
my $main = $repo->find($MAIN);
my $metadata = $main->metadata();
metadata_ok($metadata, 'author_name', 'Antonio Terceiro', 'author name');
metadata_ok($metadata, 'author_email', 'terceiro@softwarelivre.org', 'author email');
metadata_ok($metadata, 'author_date', 1297788040, 'author date'); # UNIX timestamp for [Tue Feb 15 13:40:40 2011 -0300]
metadata_ok($metadata, 'previous_commit_id', '0a06a6fcc2e7b4fe56d134e89d74ad028bb122ed', 'previous commit');
metadata_ok($metadata, 'changed_files', {'input.cc' => 'M'}, 'changed files');
my @files_entry = grep { $_->[0] eq 'files' } @$metadata;
my $files = $files_entry[0]->[1];
is($files->{'input.cc'}, '0e85dc55b30f5e257ce5615bfcb229d1ace13e01');
is($files->{'input.h'}, '44edccb29f8b8ba252f15988edacfad481606c45');
is($files->{'output.cc'}, 'ed526e137858cb903730a1886db430c28d6bebcf');
is($files->{'output.h'}, 'a67e1b0986b9cab18fbbb12d0f941982c74d724d');
is($files->{'prog.cc'}, '91745088e303c9440b6d58a5232b5d753d3c91f5');
( run in 2.560 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )