This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Devel::Peek docs with Dump changes
[perl5.git] / cpan / CPAN-Meta-Requirements / t / finalize.t
1 use strict;
2 use warnings;
3
4 use CPAN::Meta::Requirements;
5
6 use Test::More 0.88;
7
8 sub dies_ok (&@) {
9   my ($code, $qr, $comment) = @_;
10
11   my $lived = eval { $code->(); 1 };
12
13   if ($lived) {
14     fail("$comment: did not die");
15   } else {
16     like($@, $qr, $comment);
17   }
18 }
19
20 {
21   my $req = CPAN::Meta::Requirements->new;
22
23   $req->add_minimum('Foo::Bar' => 10);
24   $req->add_minimum('Foo::Bar' => 0);
25   $req->add_minimum('Foo::Bar' => 2);
26
27   $req->add_minimum('Foo::Baz' => version->declare('v1.2.3'));
28
29   $req->add_minimum('Foo::Undef' => undef);
30
31   my $want = {
32     'Foo::Bar'   => 10,
33     'Foo::Baz'   => 'v1.2.3',
34     'Foo::Undef' => 0,
35   };
36
37   is_deeply(
38     $req->as_string_hash,
39     $want,
40     "some basic minimums",
41   );
42
43   $req->finalize;
44
45   $req->add_minimum('Foo::Bar', 2);
46
47   pass('we can add a Foo::Bar requirement with no effect post finalization');
48
49   dies_ok { $req->add_minimum('Foo::Bar', 12) }
50     qr{finalized req},
51     "can't add a higher Foo::Bar after finalization";
52
53   dies_ok { $req->add_minimum('Foo::New', 0) }
54     qr{finalized req},
55     "can't add a new module prereq after finalization";
56
57   dies_ok { $req->clear_requirement('Foo::Bar') }
58     qr{finalized req},
59     "can't clear an existing prereq after finalization";
60
61   $req->clear_requirement('Bogus::Req');
62
63   pass('we can clear a prereq that was not set to begin with');
64
65   is_deeply(
66     $req->as_string_hash,
67     $want,
68     "none of our attempts to alter the object post-finalization worked",
69   );
70
71   my $cloned = $req->clone;
72
73   $cloned->add_minimum('Foo::Bar', 12);
74
75   is_deeply(
76     $cloned->as_string_hash,
77     {
78       %$want,
79       'Foo::Bar' => 12,
80     },
81     "we can alter a cloned V:R (finalization does not survive cloning)",
82   );
83
84   is_deeply(
85     $req->as_string_hash,
86     $want,
87     "...and original requirements are untouched",
88   );
89 }
90
91 done_testing;