{
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"
,
);
}
{
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 } ],
[
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;