#-*- mode: perl;-*-
use Test::More tests => 76;
use Test::Warn;
use_ok('Module::MakefilePL::Parse');
{
my $s = qq{
use 5.006001;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
NAME => 'Module::MakefilePL::Parse',
);
};
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 0);
}
{
my $VERSION = 0;
my $s = qq{
use 5.006001;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
NAME => 'Module::MakefilePL::Parse',
VERSION_FROM => 'lib/Module/MakefilePL/Parse.pm', # finds $VERSION
PREREQ_PM => { }, # e.g., Module::Name => 1.1
($] >= 5.005 ? ## Add these new keywords supported since 5.005
(ABSTRACT_FROM => 'lib/Module/MakefilePL/Parse.pm', # retrieve abstract from module
AUTHOR => 'Robert Rothenberg <rrwo at cpan.org>') : ()),
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 0);
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'Module::MakefilePL::Parse',
VERSION_FROM => 'lib/Module/MakefilePL/Parse.pm',
PREREQ_PM => {
'Test::More' => 0,
},
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 1);
ok(eq_hash($req, { 'Test::More' => 0, }));
}
{
my $s = qq{
# Note: this file was auto-generated by Module::Build::Compat version 0.03
use ExtUtils::MakeMaker;
WriteMakefile
(
'NAME' => 'List::SkipList',
'VERSION_FROM' => 'lib/List/SkipList.pm',
'PREREQ_PM' => {
'Test::More' => '0',
'enum' => '1.016'
},
'INSTALLDIRS' => 'site',
'PL_FILES' => {}
)
;
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 2);
ok(eq_hash($req, { 'Test::More' => 0, 'enum' => '1.016', }));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'NAME' => 'Acme::Beatnik',
'PREREQ_PM' => { Filter::Simple => 0.78 }, # e.g., Module::Name => 1.1
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 1);
ok(eq_hash($req, { 'Filter::Simple' => 0.78, }));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'Acme::Chef',
'PREREQ_PM' => {Test::More => 0.44, File::Temp => 0.12}, # e.g., Module::Name => 1.1);
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 2);
ok(eq_hash($req, { 'Test::More'=>0.44, 'File::Temp'=>0.12, }));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'Acme::Currency',
'PREREQ_PM' => {Test::More=>0,Filter::Simple=>0}, # e.g., Module::Name => 1.1);
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 2);
ok(eq_hash($req, { 'Test::More'=>0, 'Filter::Simple'=>0, }));
}
{
my ($LAST_API_CHANGE,$PACKAGE) = (0, "Module::MakefilePL::Parse");
my $s = qq{
use ExtUtils::MakeMaker;
# - Fill in your dependencies in PREREQ_PM
unless ($@) { # Make sure we did find the module.
print <<"CHANGE_WARN" if ${$PACKAGE.'::VERSION'} < $LAST_API_CHANGE;
Some warning message here.
CHANGE_WARN
}
WriteMakefile(
'NAME' => 'AnyLoader',
'PREREQ_PM' => {
Class::ISA => '0.31',
},
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 1);
ok(eq_hash($req, { 'Class::ISA'=>0.31, }));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'Chemistry::File::SMARTS',
'PREREQ_PM' => {qw(
Chemistry::Mol 0.24
Chemistry::Pattern 0.21
List::Util 0
Test::More 0
)},
);
};
# print STDERR $s;
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 4);
ok(eq_hash($req, {
'Chemistry::Mol' => 0.24,
'Chemistry::Pattern' => 0.21,
'List::Util' => 0,
'Test::More' => 0,
}));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => {
'Foo::Bar', 1.1,
'Bo::Baz', 0,
},
);
};
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 2);
ok(eq_hash($req, { 'Foo::Bar'=>1.1, 'Bo::Baz'=>0, }));
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => \\\%some_hash,
'ANOTHER' => { foo => 'bar', },
);
};
my $m;
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Error: unexpected syntax found";
ok(!defined $m);
}
{
# local $TODO = "May be ignored by Text::Balanced";
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => {
'Module' => 0,
\$Dynamic => 0,
},
);
};
my $m;
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Warning: possible variable references";
ok(!defined $m);
}
{
local $TODO = "May be ignored by Text::Balanced";
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => {
'Module' => sub { return 1; },
},
);
};
my $m;
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Warning: embedded hash references or code";
# local $TODO = "Undetermined behavior";
ok(!defined $m, "May or may not be defined");
}
{
local $TODO = "May be ignored by Text::Balanced";
my $s = qq[
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => {
'Module' => 1,
);
];
my $m;
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Missing closing bracket";
ok(!defined $m);
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => [
'Module', 0,
],
);
};
my $m;
eval {
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Error: cannot find left bracket after PREREQ_PM";
};
ok(!defined $m);
}
{
my $s = qq{
use ExtUtils::MakeMaker;
WriteMakefile(
'PREREQ_PM' => (
'Module', 0,
),
);
};
my $m;
eval {
warning_is {
$m = Module::MakefilePL::Parse->new( $s );
} "Error: cannot find left bracket after PREREQ_PM";
};
ok(!defined $m);
}
{
my $s = qq{
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile
(
'DISTNAME' => 'DBIx-MSSQLReporter',
'PREREQ_PM' =>
{
DBI => '1.13',
},
};
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'ExtUtils::MakeMaker');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 1);
ok(eq_hash($req, { 'DBI'=>1.13, }));
}
{
my $s = qq{
use inc::Module::Install;
name ('only');
include_deps ('Test::More', 5.004);
build_requires ('Test::More', 0);
};
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'Module::Install');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 1);
ok(eq_hash($req, { 'Test::More'=>0 }));
}
{
my $s = qq{
use inc::Module::Install;
requires ('perl' => 5.004);
requires ('Text::Balanced', '3.14159');
build_requires ('Test::More');
};
my $m = Module::MakefilePL::Parse->new( $s );
ok(defined $m);
ok($m->install_type eq 'Module::Install');
my $req = $m->required;
ok(defined $req);
ok((keys %$req) == 3);
# require Data::Dumper;
# print STDERR "\n\n\n", Data::Dumper->Dump([$req]), "\n\n\n";
ok(eq_hash($req, {
'Test::More' => 0,
'Text::Balanced' => 3.14159,
'perl' => 5.004,
}));
}