#!/usr/bin/perl -w
use strict;
use Test::More;
use vars '$loaded';
BEGIN { $loaded = eval { require PAR::Dist; 1 } };
BEGIN {
my $tests = 29;
if ($loaded) {
# skip these tests without YAML loader or without (A::Zip or zipo/unzip)
$PAR::Dist::DEBUG = 1;
my $tools = PAR::Dist::_check_tools();
$PAR::Dist::DEBUG = 0;
if (not defined $tools->{DumpFile}) {
plan skip_all => "Skip because no YAML loader/dumper could be found";
exit();
}
elsif (not defined $tools->{zip}) {
plan skip_all => "Skip because neither Archive::Zip nor zip/unzip could be found";
exit();
}
else {
plan tests => $tests;
ok(1);
}
}
else {
plan tests => $tests;
ok(0, "Could not load PAR::Dist: $@");
exit();
}
}
ok (eval { require PAR::Dist; 1 });
chdir('t') if -d 't';
my @dist = (
'data/dist1.par',
'data/dist2.par',
);
my @tmp = map {my $f = $_; $f =~ s/^data\///; $f} @dist;
require File::Copy;
for (0..$#dist) {
ok(-f $dist[$_]);
ok(File::Copy::copy($dist[$_], $tmp[$_]));
}
sub cleanup {
unlink($_) for @tmp;
}
$SIG{INT} = \&cleanup;
$SIG{TERM} = \&cleanup;
END { cleanup(); }
my %provides_expect = (
"Math::Symbolic::Custom::Transformation" => {
file => "lib/Math/Symbolic/Custom/Transformation.pm",
version => "2.01",
},
"Math::Symbolic::Custom::Transformation::Group" => {
file => "lib/Math/Symbolic/Custom/Transformation/Group.pm",
version => "1.25",
},
"Test::Kit" => {
file => "lib/Test/Kit.pm",
version => "0.02",
},
"Test::Kit::Features" => {
file => "lib/Test/Kit/Features.pm",
version => "0.02",
},
"Test::Kit::Result" => {
file => "lib/Test/Kit/Features.pm",
},
);
my %requires_expect = (
"Math::Symbolic" => '0.507',
"Math::Symbolic::Custom::Pattern" => '1.20',
"base" => '2.11',
"namespace::clean" => '0.08',
"Test::More" => '0',
);
my %build_requires_expect = (
"Test::More" => '0.1',
"Test::Differences" => undef,
);
my %recommends_expect = (
"Test::Pod" => '1.0',
"Test::Pod::Coverage" => '1.0',
);
PAR::Dist::merge_par(@tmp);
ok(1); # got to this point
my ($y_func) = PAR::Dist::_get_yaml_functions();
my $meta = PAR::Dist::get_meta($tmp[0]);
ok(defined($meta));
my $result = $y_func->{Load}->( $meta );
ok(defined $result);
$result = $result->[0] if ref($result) eq 'ARRAY';
my $provides = $result->{provides};
ok(ref($provides) eq 'HASH');
foreach my $module (keys %provides_expect) {
ok(ref($provides->{$module}) eq 'HASH');
my $modhash = $provides->{$module};
my $exphash = $provides_expect{$module};
ok($exphash->{file} eq $modhash->{file});
if (exists $exphash->{version}) {
ok($exphash->{version} eq $modhash->{version});
}
else {
ok(!exists($modhash->{version}));
}
}
is_deeply($result->{requires}, \%requires_expect, "requires merged as expected");
is_deeply($result->{build_requires}, \%build_requires_expect, "build_requires merged as expected");
is_deeply($result->{configure_requires}, undef, "configure_requires merged as expected");
is_deeply($result->{recommends}, \%recommends_expect, "recommends merged as expected");
__END__