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 )