From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
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_1 = CPAN::Meta::Requirements->new;
$req_1->add_minimum(Left => 10);
$req_1->add_minimum(Shared => 2);
$req_1->add_exclusion(Shared => 7);
my $req_2 = CPAN::Meta::Requirements->new;
$req_2->add_minimum(Shared => 1);
$req_2->add_maximum(Shared => 9);
$req_2->add_minimum(Right => 18);
$req_1->add_requirements($req_2);
is_deeply(
$req_1->as_string_hash,
{
Left => 10,
Shared => '>= 2, <= 9, != 7',
Right => 18,
},
"add requirements to an existing set of requirements",
);
}
{
my $req_1 = CPAN::Meta::Requirements->new;
$req_1->add_minimum(Left => 10);
$req_1->add_minimum(Shared => 2);
$req_1->add_exclusion(Shared => 7);
$req_1->exact_version(Exact => 8);
my $req_2 = CPAN::Meta::Requirements->new;
$req_2->add_minimum(Shared => 1);
$req_2->add_maximum(Shared => 9);
$req_2->add_minimum(Right => 18);
$req_2->exact_version(Exact => 8);
my $clone = $req_1->clone->add_requirements($req_2);
is_deeply(
$req_1->as_string_hash,
{
Left => 10,
Shared => '>= 2, != 7',
Exact => '== 8',
},
"clone/add_requirements does not affect lhs",
);
is_deeply(
$req_2->as_string_hash,
{
Shared => '>= 1, <= 9',
Right => 18,
Exact => '== 8',
},
"clone/add_requirements does not affect rhs",
);
is_deeply(
$clone->as_string_hash,
{
Left => 10,
Shared => '>= 2, <= 9, != 7',
Right => 18,
Exact => '== 8',
},
"clone and add_requirements",
);
$clone->clear_requirement('Shared');
is_deeply(
$clone->as_string_hash,
{
Left => 10,
Right => 18,
Exact => '== 8',
},
"cleared the shared requirement",
);
}
{
my $req_1 = CPAN::Meta::Requirements->new;
$req_1->add_maximum(Foo => 1);
my $req_2 = $req_1->clone;
is_deeply(
$req_2->as_string_hash,
{
'Foo' => '<= 1',
},
'clone with only max',
);
}
{
my $left = CPAN::Meta::Requirements->new;
$left->add_minimum(Foo => 0);
$left->add_minimum(Bar => 1);
my $right = CPAN::Meta::Requirements->new;
$right->add_requirements($left);
is_deeply(
$right->as_string_hash,
{
Foo => 0,
Bar => 1,
},
"we do not lose 0-min reqs on merge",
);
}
done_testing;