4 use CPAN::Meta::Requirements;
9 my ($code, $qr, $comment) = @_;
11 my $lived = eval { $code->(); 1 };
14 fail("$comment: did not die");
16 like($@, $qr, $comment);
21 my $req = CPAN::Meta::Requirements->new;
23 $req->add_minimum('Foo::Bar' => 10);
24 $req->add_minimum('Foo::Bar' => 0);
25 $req->add_minimum('Foo::Bar' => 2);
27 $req->add_minimum('Foo::Baz' => version->declare('v1.2.3'));
29 $req->add_minimum('Foo::Undef' => undef);
35 'Foo::Baz' => 'v1.2.3',
38 "some basic minimums",
41 ok($req->is_simple, "just minimums? simple");
45 my $req = CPAN::Meta::Requirements->new;
46 $req->add_maximum(Foo => 1);
47 is_deeply($req->as_string_hash, { Foo => '<= 1' }, "max only");
49 ok(! $req->is_simple, "maximums? not simple");
53 my $req = CPAN::Meta::Requirements->new;
54 $req->add_exclusion(Foo => 1);
55 $req->add_exclusion(Foo => 2);
57 # Why would you ever do this?? -- rjbs, 2010-02-20
58 is_deeply($req->as_string_hash, { Foo => '!= 1, != 2' }, "excl only");
62 my $req = CPAN::Meta::Requirements->new;
64 $req->add_minimum(Foo => 1);
65 $req->add_maximum(Foo => 2);
75 $req->add_maximum(Foo => 3);
82 "exclusions already outside range do not matter",
85 $req->add_exclusion(Foo => 1.5);
90 Foo => '>= 1, <= 2, != 1.5',
95 $req->add_minimum(Foo => 1.6);
100 Foo => '>= 1.6, <= 2',
102 "exclusions go away when made irrelevant",
107 my $req = CPAN::Meta::Requirements->new;
109 $req->add_minimum(Foo => 1);
110 $req->add_exclusion(Foo => 1);
111 $req->add_maximum(Foo => 2);
114 $req->as_string_hash,
118 "we can exclude an endpoint",
123 my $req = CPAN::Meta::Requirements->new;
124 $req->add_minimum(Foo => 1);
126 $req->add_exclusion(Foo => 1);
128 dies_ok { $req->add_maximum(Foo => 1); }
130 "can't exclude all values" ;
134 my $req = CPAN::Meta::Requirements->new;
135 $req->add_minimum(Foo => 1);
136 dies_ok {$req->exact_version(Foo => 0.5); }
137 qr/outside of range/,
138 "can't add outside-range exact spec to range";
142 my $req = CPAN::Meta::Requirements->new;
143 $req->add_minimum(Foo => 1);
144 dies_ok { $req->add_maximum(Foo => 0.5); }
145 qr/minimum exceeds maximum/,
146 "maximum must exceed (or equal) minimum";
148 $req = CPAN::Meta::Requirements->new;
149 $req->add_maximum(Foo => 0.5);
150 dies_ok { $req->add_minimum(Foo => 1); }
151 qr/minimum exceeds maximum/,
152 "maximum must exceed (or equal) minimum";
156 my $req = CPAN::Meta::Requirements->new;
158 $req->add_minimum(Foo => 1);
159 $req->add_maximum(Foo => 1);
161 $req->add_maximum(Foo => 2); # ignored
162 $req->add_minimum(Foo => 0); # ignored
163 $req->add_exclusion(Foo => .5); # ignored
166 $req->as_string_hash,
170 "if min==max, becomes exact requirement",
175 my $req = CPAN::Meta::Requirements->new;
176 $req->add_minimum(Foo => 1);
177 $req->add_exclusion(Foo => 0);
178 $req->add_maximum(Foo => 3);
179 $req->add_exclusion(Foo => 4);
181 $req->add_exclusion(Foo => 2);
182 $req->add_exclusion(Foo => 2);
185 $req->as_string_hash,
187 Foo => '>= 1, <= 3, != 2',
189 'test exclusion-skipping',
194 my $req = CPAN::Meta::Requirements->new;
195 $req->exact_version(Foo => 1);
202 $req->exact_version(Foo => 1); # ignored
204 is_deeply($req->as_string_hash, { Foo => '== 1' }, "exact requirement");
206 dies_ok { $req->exact_version(Foo => 2); }
208 "can't exactly specify differing versions" ;
211 $req->add_minimum(Foo => 0); # ignored
212 $req->add_maximum(Foo => 2); # ignored
214 dies_ok { $req->add_maximum(Foo => 0); } qr/maximum below/, "max < fixed";
217 dies_ok { $req->add_minimum(Foo => 2); } qr/minimum above/, "min > fixed";
220 $req->add_exclusion(Foo => 8); # ignored
221 dies_ok { $req->add_exclusion(Foo => 1); } qr/excluded exact/, "!= && ==";
227 is($req->requirements_for_module('Foo'), '== 1', 'requirements_for_module');
229 # test empty/undef returns
230 my @list = $req->requirements_for_module('FooBarBamBaz');
231 my $scalar = $req->requirements_for_module('FooBarBamBaz');
232 is ( scalar @list, 0, "requirements_for_module() returns empty for not found (list)" );
233 is ( $scalar, undef, "requirements_for_module() returns undef for not found (scalar)" );