1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
use strict;
use warnings;
use CPAN::Meta::Requirements;
use version;
use Test::More 0.88;
my %DATA = (
'Foo::Bar' => [ 10, 10 ],
'Foo::Baz' => [ 'invalid_version', 42 ],
'Foo::Qux' => [ 'version', 42 ],
);
my %input = map { ($_ => $DATA{$_}->[0]) } keys %DATA;
my %expected = map { ($_ => $DATA{$_}->[1]) } keys %DATA;
sub dies_ok (&@) {
my ($code, $qr, $comment) = @_;
no warnings 'redefine';
local *Regexp::CARP_TRACE = sub { "<regexp>" };
my $lived = eval { $code->(); 1 };
if ($lived) {
fail("$comment: did not die");
} else {
like($@, $qr, $comment);
}
}
my $hook_text;
sub _fixit { my ($v, $m) = @_; $hook_text .= $m; return version->new(42) }
{
my $req = CPAN::Meta::Requirements->new( {bad_version_hook => \&_fixit} );
my ($k, $v);
while (($k, $v) = each %input) {
note "adding minimum requirement: $k => $v";
eval { $req->add_minimum($k => $v) };
is( $@, '', "adding minimum '$k' for $v" );
}
like( $hook_text, qr/Foo::Baz/, 'hook stored module name' );
is_deeply(
$req->as_string_hash,
\%expected,
"hook fixes invalid version",
);
}
{
my $req = CPAN::Meta::Requirements->new( {bad_version_hook => sub { 0 }} );
dies_ok { $req->add_minimum('Foo::Baz' => 'invalid_version') }
qr/Invalid version/,
"dies if hook doesn't return version object";
}
done_testing;
|