|
Packit |
f40462 |
use strict;
|
|
Packit |
f40462 |
use warnings;
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
use CPAN::Meta::Requirements;
|
|
Packit |
f40462 |
use version;
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
use Test::More 0.88;
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
my %DATA = (
|
|
Packit |
f40462 |
'Foo::Bar' => [ 10, 10 ],
|
|
Packit |
f40462 |
'Foo::Baz' => [ 'invalid_version', 42 ],
|
|
Packit |
f40462 |
'Foo::Qux' => [ 'version', 42 ],
|
|
Packit |
f40462 |
);
|
|
Packit |
f40462 |
my %input = map { ($_ => $DATA{$_}->[0]) } keys %DATA;
|
|
Packit |
f40462 |
my %expected = map { ($_ => $DATA{$_}->[1]) } keys %DATA;
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
sub dies_ok (&@) {
|
|
Packit |
f40462 |
my ($code, $qr, $comment) = @_;
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
no warnings 'redefine';
|
|
Packit |
f40462 |
local *Regexp::CARP_TRACE = sub { "<regexp>" };
|
|
Packit |
f40462 |
my $lived = eval { $code->(); 1 };
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
if ($lived) {
|
|
Packit |
f40462 |
fail("$comment: did not die");
|
|
Packit |
f40462 |
} else {
|
|
Packit |
f40462 |
like($@, $qr, $comment);
|
|
Packit |
f40462 |
}
|
|
Packit |
f40462 |
}
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
my $hook_text;
|
|
Packit |
f40462 |
sub _fixit { my ($v, $m) = @_; $hook_text .= $m; return version->new(42) }
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
{
|
|
Packit |
f40462 |
my $req = CPAN::Meta::Requirements->new( {bad_version_hook => \&_fixit} );
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
my ($k, $v);
|
|
Packit |
f40462 |
while (($k, $v) = each %input) {
|
|
Packit |
f40462 |
note "adding minimum requirement: $k => $v";
|
|
Packit |
f40462 |
eval { $req->add_minimum($k => $v) };
|
|
Packit |
f40462 |
is( $@, '', "adding minimum '$k' for $v" );
|
|
Packit |
f40462 |
}
|
|
Packit |
f40462 |
like( $hook_text, qr/Foo::Baz/, 'hook stored module name' );
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
is_deeply(
|
|
Packit |
f40462 |
$req->as_string_hash,
|
|
Packit |
f40462 |
\%expected,
|
|
Packit |
f40462 |
"hook fixes invalid version",
|
|
Packit |
f40462 |
);
|
|
Packit |
f40462 |
}
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
{
|
|
Packit |
f40462 |
my $req = CPAN::Meta::Requirements->new( {bad_version_hook => sub { 0 }} );
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
dies_ok { $req->add_minimum('Foo::Baz' => 'invalid_version') }
|
|
Packit |
f40462 |
qr/Invalid version/,
|
|
Packit |
f40462 |
"dies if hook doesn't return version object";
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
}
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
|
|
Packit |
f40462 |
done_testing;
|