blob: 58048b51d5a546a15075b7f88857ed35701113c4 [file] [log] [blame]
use strict;
use warnings;
use CPAN::Meta::Requirements;
use Test::More 0.88;
sub dies_ok (&@) {
my ($code, $qr, $comment) = @_;
my $lived = eval { $code->(); 1 };
if ($lived) {
fail("$comment: did not die");
} else {
like($@, $qr, $comment);
}
}
{
my $req = CPAN::Meta::Requirements->new;
$req->add_minimum('Foo::Bar' => 10);
$req->add_minimum('Foo::Bar' => 0);
$req->add_minimum('Foo::Bar' => 2);
$req->add_minimum('Foo::Baz' => version->declare('v1.2.3'));
$req->add_minimum('Foo::Undef' => undef);
my $want = {
'Foo::Bar' => 10,
'Foo::Baz' => 'v1.2.3',
'Foo::Undef' => 0,
};
is_deeply(
$req->as_string_hash,
$want,
"some basic minimums",
);
$req->finalize;
$req->add_minimum('Foo::Bar', 2);
pass('we can add a Foo::Bar requirement with no effect post finalization');
dies_ok { $req->add_minimum('Foo::Bar', 12) }
qr{finalized req},
"can't add a higher Foo::Bar after finalization";
dies_ok { $req->add_minimum('Foo::New', 0) }
qr{finalized req},
"can't add a new module prereq after finalization";
dies_ok { $req->clear_requirement('Foo::Bar') }
qr{finalized req},
"can't clear an existing prereq after finalization";
$req->clear_requirement('Bogus::Req');
pass('we can clear a prereq that was not set to begin with');
is_deeply(
$req->as_string_hash,
$want,
"none of our attempts to alter the object post-finalization worked",
);
my $cloned = $req->clone;
$cloned->add_minimum('Foo::Bar', 12);
is_deeply(
$cloned->as_string_hash,
{
%$want,
'Foo::Bar' => 12,
},
"we can alter a cloned V:R (finalization does not survive cloning)",
);
is_deeply(
$req->as_string_hash,
$want,
"...and original requirements are untouched",
);
}
done_testing;