Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

use strict;
use Test::More 0.88;
use Test::Fatal qw(exception);
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ GatherDir => ],
[ Prereqs => => { A => 1 } ],
[ Prereqs => RuntimeRequires => { A => 2, B => 3 } ],
[ Prereqs => DevelopSuggests => { C => 4 } ],
[ Prereqs => TestConflicts => { C => 5, D => 6 } ],
[ Prereqs => Recommends => { E => 7 } ],
),
},
},
);
$tzil->build;
cmp_deeply(
$tzil->distmeta,,
superhashof({
prereqs => {
develop => { suggests => { C => 4 } },
runtime => {
requires => { A => 2, B => 3 },
recommends => { E => 7 },
},
test => { conflicts => { C => 5, D => 6 } },
}
}),
"prereqs merged",
);
}
# test that we avoid a CPAN.pm bug by synchronizing Runtime|Build|Test requires
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ GatherDir => ],
[ Prereqs => RuntimeRequires => { A => 2, B => 0, C => 2 } ],
[ RemovePrereqs => { remove => [ qw(C) ] } ],
[ Prereqs => TestRequires => { A => 1, B => 1, C => 1 } ],
[ Prereqs => BuildRequires => { A => 0, B => 2, C => 0 } ],
),
},
},
);
$tzil->build;
is_deeply(
$tzil->distmeta->{prereqs},
{
runtime => {
requires => { A => 2, B => 2 },
},
test => {
requires => { A => 2, B => 2, C => 1 },
},
build => {
requires => { A => 2, B => 2, C => 1 },
},
},
"prereqs synchronized across runtime, build & test phases",
);
}
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ GatherDir => ],
[ Prereqs => => { A => 1 } ],
[ Prereqs => RuntimeRequires => { A => 2, B => 3 } ],
[ Prereqs => DevelopSuggests => { C => 4 } ],
[ Prereqs => TestConflicts => { C => 5, D => 6 } ],
[ RemovePrereqs => { remove => [ qw(B C) ] } ],
),
},
},
);
$tzil->build;
cmp_deeply(
$tzil->distmeta,
superhashof(
{
prereqs =>
{
runtime => { requires => { A => 2 } },
test => { conflicts => { D => 6 } },
},
}
),
"prereqs merged and pruned",
);
}
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ GatherDir => ],
[ Prereqs => { A => 1 } ],
[ Prereqs => P1
=> { qw(-phase runtime -type requires), A => 2, B => 3 } ],
[ Prereqs => P2
=> { qw(-phase develop -type suggests), C => 4 } ],
[ Prereqs => P3
=> { qw(-phase test -relationship conflicts), C => 5, D => 6 } ],
[ Prereqs => P4
=> { qw(-type recommends), E => 7 } ],
),
},
},
);
$tzil->build;
cmp_deeply(
$tzil->distmeta,
superhashof(
{
prereqs =>
{
develop => { suggests => { C => 4 } },
runtime => {
requires => { A => 2, B => 3 },
recommends => { E => 7 },
},
test => { conflicts => { C => 5, D => 6 } },
},
}
),
"-phase, -type, & -relationship",
);
}
{
like( exception {
Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ Prereqs => { A => 1 } ],
[ Prereqs => NotMagic => { B => 3 } ],
),
},
},
);
},
qr/No -phase or -relationship specified/,
"non-magic name dies");
}
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
[ Prereqs => 'Bundle/Prereqs' => { A => 1 } ],
[ Prereqs => 'Other/Prereq' => { B => 1 } ],
[ Prereqs => P1 => { qw(-phase runtime), C => 2 } ],
[ Prereqs => P2 => { qw(-relationship requires), D => 2 } ],
[ Prereqs => P3 => { qw(-phase configure), E => 2 } ],
[ Prereqs => P4 => { qw(-phase build -type suggests), F => 2 } ],
# Mixing a magic name with -phase or -type is *NOT RECOMMENDED*
# but it does work (at least for now)
[ Prereqs => Recommends => { qw(-phase test), G => 2 } ],
),
},
},
);
my @expected = qw(
Bundle/Prereqs runtime requires
Other/Prereq runtime requires
P1 runtime requires
P2 runtime requires
P3 configure requires
P4 build suggests
Recommends test recommends
);
while (@expected) {
my $name = shift @expected;
my $p = $tzil->plugin_named($name);
is($p->prereq_phase, shift @expected, "$name phase");
is($p->prereq_type, shift @expected, "$name relationship");
}
}
done_testing;