App-makefilepl2cpanfile
view release on metacpan or search on metacpan
t/parse_prereqs.t view on Meta::CPAN
use strict;
use warnings;
use Test::Most;
use App::makefilepl2cpanfile;
# -----------------------------------------------------------------------
# Basic extraction â simple PREREQ_PM / TEST_REQUIRES / etc. form
# -----------------------------------------------------------------------
my $content = <<'END_MF';
WriteMakefile(
PREREQ_PM => {
'Moo' => '2.000',
'Try::Tiny' => 0,
},
TEST_REQUIRES => {
'Test::More' => 0,
},
CONFIGURE_REQUIRES => {
'ExtUtils::MakeMaker' => '6.64',
},
BUILD_REQUIRES => {
'Module::Build' => '0.42',
},
);
END_MF
my $deps = App::makefilepl2cpanfile::parse_prereqs($content);
isa_ok $deps, 'HASH', 'parse_prereqs returns a hashref';
# The simple keys all map to the 'requires' relationship.
ok exists $deps->{runtime}{requires}{'Moo'}, 'Moo is in runtime/requires';
is $deps->{runtime}{requires}{'Moo'}{version}, '2.000', 'Moo carries its version';
ok exists $deps->{runtime}{requires}{'Try::Tiny'}, 'Try::Tiny is in runtime/requires';
is $deps->{runtime}{requires}{'Try::Tiny'}{version}, 0, 'Try::Tiny version is 0';
ok exists $deps->{test}{requires}{'Test::More'}, 'Test::More in test/requires';
ok exists $deps->{configure}{requires}{'ExtUtils::MakeMaker'}, 'EMM in configure/requires';
is $deps->{configure}{requires}{'ExtUtils::MakeMaker'}{version}, '6.64',
'ExtUtils::MakeMaker version correct';
ok exists $deps->{build}{requires}{'Module::Build'}, 'Module::Build in build/requires';
is $deps->{build}{requires}{'Module::Build'}{version}, '0.42',
'Module::Build version correct';
# 'develop' must not be injected by parse_prereqs â that is generate()'s job.
ok !exists $deps->{develop}, 'develop phase absent from parse_prereqs output';
# -----------------------------------------------------------------------
# Inline comment preservation
# -----------------------------------------------------------------------
my $commented = <<'END_MF';
WriteMakefile(
PREREQ_PM => {
'Foo::Bar' => 0, # provides Foo::Bar::Baz used in bin/ scripts
# 'Old::Module' => 0, # disabled â replaced by Foo::Bar
},
);
END_MF
my $dep2 = App::makefilepl2cpanfile::parse_prereqs($commented);
ok exists $dep2->{runtime}{requires}{'Foo::Bar'}, 'uncommented module extracted';
ok !exists $dep2->{runtime}{requires}{'Old::Module'}, 'fully-commented module not extracted';
like $dep2->{runtime}{requires}{'Foo::Bar'}{comment},
qr/provides Foo::Bar::Baz/,
'inline comment is captured verbatim';
# -----------------------------------------------------------------------
# Structured prereqs => { phase => { rel => { ... } } } form
# -----------------------------------------------------------------------
my $structured = <<'END_MF';
WriteMakefile(
prereqs => {
runtime => {
requires => {
'Scalar::Util' => 0,
},
recommends => {
'Future' => '0.33', # async support
},
suggests => {
'Log::Any' => 0,
},
},
test => {
requires => {
'Test::Exception' => 0,
},
},
},
);
( run in 1.920 second using v1.01-cache-2.11-cpan-6de40a662fe )