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

use strict;
use Test::More 0.88;
sub build_meta {
my $tzil = shift;
$tzil->build;
$tzil->distmeta;
}
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{ },
);
# check found prereqs
my $meta = build_meta($tzil);
my %want_runtime = (
# 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,
);
is_deeply(
$meta->{prereqs}{runtime}{requires},
\%want_runtime,
'all requires found, but no more',
);
# Try again with configure_finder:
$tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{
add_files => {
'source/dist.ini' => simple_ini(
qw(GatherDir ExecDir),
[ AutoPrereqs => { skip => '^DZPA::Skip',
configure_finder => ':IncModules' } ],
),
'source/inc/DZPA.pm' => "use DZPA::NotInDist;\n use DZPA::Configure;\n",
},
},
);
# check found prereqs
$meta = build_meta($tzil);
is_deeply(
$meta->{prereqs}{runtime}{requires},
\%want_runtime,
'configure_finder did not change runtime requires',
);
my %want_configure = (
'DZPA::Configure' => 0,
'DZPA::NotInDist' => 0,
);
is_deeply(
$meta->{prereqs}{configure}{requires},
\%want_configure,
'configure_requires is correct',
);
# Try again with tests added to the dist:
$tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{
add_files => {
'source/dist.ini' => simple_ini(
qw(GatherDir ExecDir),
[ AutoPrereqs => { skip => '^DZPA::Skip',
configure_finder => ':IncModules' } ],
),
'source/inc/DZPA.pm' => "use DZPA::NotInDist;\n use DZPA::Configure;\n",
'source/t/basic.t' => "use Test::Foo;\n",
},
},
);
# check found prereqs
$meta = build_meta($tzil);
my %want_test = (
'Test::Foo' => '0',
);
cmp_deeply(
$meta,
superhashof({
prereqs => {
runtime => { requires => \%want_runtime },
configure => { requires => \%want_configure },
test => { requires => \%want_test },
},
}),
'test_finder did not change runtime, configure requires; test requires is correct',
);
# Try again with extra tests added to the dist:
$tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{
add_files => {
'source/dist.ini' => simple_ini(
qw(GatherDir ExecDir),
[ AutoPrereqs => { skip => '^DZPA::Skip',
configure_finder => ':IncModules' } ],
),
'source/inc/DZPA.pm' => "use DZPA::NotInDist;\n use DZPA::Configure;\n",
'source/t/basic.t' => "use Test::Foo;\n",
'source/xt/author/more1.t' => "use Test::Bar;\n",
'source/xt/smoke/more2.t' => "use Test::Baz;\n",
'source/xt/release/more3.t' => "use Test::Qux;\n",
'source/xt/more4.t' => "use Test::Norf;\n",
},
},
);
# check found prereqs
$meta = build_meta($tzil);
my %want_develop = (
'Test::Bar' => '0',
'Test::Baz' => '0',
'Test::Qux' => '0',
'Test::Norf' => '0',
);
cmp_deeply(
$meta,
superhashof({
prereqs => {
runtime => { requires => \%want_runtime },
configure => { requires => \%want_configure },
test => { requires => \%want_test },
develop => { requires => \%want_develop },
},
}),
'develop_finder did not change runtime, configure, test requires; develop requires is correct',
);
# Try again with a customized scanner list:
$tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{
add_files => {
'source/dist.ini' => simple_ini(
qw(GatherDir ExecDir),
[ AutoPrereqs => { scanner => 'Perl5', extra_scanner => 'Aliased' } ],
),
'source/lib/DZPA/Aliased.pm' => "use aliased 'Long::Class::Name';\n",
},
},
);
# check found prereqs
$meta = build_meta($tzil);
{
my %want_runtime = %want_runtime;
# Moose-style prereqs should not be recognized this time:
delete $want_runtime{'DZPA::Base::Moose1'};
delete $want_runtime{'DZPA::Base::Moose2'};
delete $want_runtime{'DZPA::Role'};
$want_runtime{'DZPA::Skip::Blah'} = 0; # not skipping anymore
$want_runtime{'DZPA::Skip::Foo'} = 0;
$want_runtime{'aliased'} = 0;
$want_runtime{'Long::Class::Name'} = 0;
is_deeply(
$meta->{prereqs}{runtime}{requires},
\%want_runtime,
'custom scanner list',
);
}
# Try again with a non-default prereq type:
$tzil = Builder->from_config(
{ dist_root => 'corpus/dist/AutoPrereqs' },
{
add_files => {
'source/dist.ini' => simple_ini(
qw(GatherDir ExecDir),
[ AutoPrereqs => { skip => '^DZPA::Skip',
type => 'suggests' } ],
),
'source/t/basic.t' => "use Test::Foo;\n",
},
},
);
# check found prereqs
$meta = build_meta($tzil);
cmp_deeply(
$meta,
superhashof({
prereqs => {
runtime => { suggests => \%want_runtime },
test => { suggests => \%want_test },
},
}),
'all prereqs were added with the "suggests" relationship',
);
done_testing;