use strict; use warnings; use Test::More 0.88; use Test::Deep; use Test::DZil; use YAML::Tiny; 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;