The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Test::More 0.88;
# see also t/plugins/autoprereqs.t
my %prereqs = (
requires => {
# DZPA::Main should not be extracted
'DZPA::Base::Moose1' => 0,
'DZPA::Base::Moose2' => 0,
'DZPA::Base::base1' => 0,
'DZPA::Base::base2' => 0,
'DZPA::Base::base3' => 0,
'DZPA::Base::parent1' => 0,
'DZPA::Base::parent2' => 0,
'DZPA::Base::parent3' => 0,
'DZPA::IgnoreAPI' => 0,
'DZPA::IndentedRequire' => '3.45',
'DZPA::IndentedUse' => '0.13',
'DZPA::MinVerComment' => '0.50',
'DZPA::ModRequire' => 0,
'DZPA::NotInDist' => 0,
'DZPA::Role' => 0,
'DZPA::ScriptUse' => 0,
'base' => 0,
'lib' => 0,
'parent' => 0,
'perl' => 5.008,
'strict' => 0,
'warnings' => 0,
},
recommends => {
'Term::ReadLine::Gnu' => 0,
'Archive::Tar::Wrapper' => 0.15
},
suggests => {
'PPI::XS' => 1.23
}
);
my %versions = ('String::Formatter' => 0);
for my $type (keys %prereqs) {
@versions{ keys %{$prereqs{$type}} } = values %{$prereqs{$type}};
}
my @default_prereqs = (
keys %{$prereqs{requires}},
keys %{$prereqs{recommends}}
);
for my $how (
[ [ ], sub {$_} ], # normal
[ [ '--versions' ], sub { "$_ = $versions{$_}" } ],
[ [ '--cpanm-versions' ], sub { qq{$_~"$versions{$_}"} } ],
) {
my @opt = @{ $how->[0] };
my $map = $how->[1];
my $desc = @opt ? "@opt" : "default";
my $make_bag = sub { bag(map {; $map->() } grep {; $_ ne 'perl' } @_) };
subtest "$desc output" => sub {
{
my $output = test_dzil(
'corpus/dist/AutoPrereqs',
[ qw(listdeps), @opt ]
)->output;
cmp_deeply(
[ split("\n", $output) ],
$make_bag->(@default_prereqs),
"all prereqs listed as output",
);
}
{
my $output = test_dzil(
'corpus/dist/AutoPrereqs',
[ qw(listdeps --no-requires), @opt ]
)->output;
cmp_deeply(
[ split("\n", $output) ],
$make_bag->(keys %{$prereqs{recommends}}),
"no recommended prereqs listed as output, --no-requires",
);
}
{
my $output = test_dzil(
'corpus/dist/AutoPrereqs',
[ qw(listdeps --no-recommends), @opt ]
)->output;
cmp_deeply(
[ split("\n", $output) ],
$make_bag->(keys %{$prereqs{requires}}),
'no recommended prereqs listed as output, --no-recommends',
);
}
{
my $output = test_dzil(
'corpus/dist/AutoPrereqs',
[ qw(listdeps --suggests), @opt ]
)->output;
cmp_deeply(
[ split("\n", $output) ],
$make_bag->(@default_prereqs, keys %{$prereqs{suggests}}),
'no recommended prereqs listed as output, --suggests',
);
}
foreach my $arg (qw(--author --develop)) {
my $output = test_dzil(
'corpus/dist/AutoPrereqs',
[ 'listdeps', $arg, @opt ]
)->output;
cmp_deeply(
[ split("\n", $output) ],
$make_bag->('String::Formatter', @default_prereqs),
'develop prereqs included in output for ' . $arg,
);
}
};
}
done_testing;