xref: /openbsd-src/gnu/usr.bin/perl/cpan/CPAN-Meta/t/prereqs-finalize.t (revision 9f11ffb7133c203312a01e4b986886bc88c7d74b)
1use strict;
2use warnings;
3use Test::More 0.88;
4
5use CPAN::Meta::Prereqs;
6
7delete $ENV{PERL_YAML_BACKEND};
8delete $ENV{PERL_JSON_BACKEND};
9delete $ENV{CPAN_META_JSON_BACKEND};
10delete $ENV{CPAN_META_JSON_DECODER};
11
12sub dies_ok (&@) {
13  my ($code, $qr, $comment) = @_;
14
15  if (eval { $code->(); 1 }) {
16    fail("$comment: did not die");
17  } else {
18    like($@, $qr, $comment);
19  }
20}
21
22my $prereqs_struct = {
23  runtime => {
24    requires => {
25      'Config' => '1.234',
26      'Cwd'    => '876.5',
27      'IO::File'   => 0,
28      'perl'       => '5.005_03',
29    },
30    recommends => {
31      'Pod::Text' => 0,
32      'YAML'      => '0.35',
33    },
34  },
35  build => {
36    requires => {
37      'Test' => 0,
38    },
39  }
40};
41
42my $prereqs = CPAN::Meta::Prereqs->new($prereqs_struct);
43
44isa_ok($prereqs, 'CPAN::Meta::Prereqs');
45
46$prereqs->finalize;
47
48ok($prereqs->is_finalized, 'cloned obj is not finalized');
49
50is_deeply($prereqs->as_string_hash, $prereqs_struct, '...and still round-trip');
51
52$prereqs->requirements_for(qw(runtime requires))->add_minimum(Cwd => 10);
53
54pass('...we can add a minimum if it has no effect');
55
56dies_ok
57  { $prereqs->requirements_for(qw(runtime requires))->add_minimum(Cwd => 1000) }
58  qr{finalized req},
59  '...but we die if it would alter a finalized prereqs';
60
61$prereqs->requirements_for(qw(develop suggests));
62
63pass('...we can get a V:R object for a previously unconfigured phase');
64
65dies_ok
66  { $prereqs->requirements_for(qw(develop suggests))->add_minimum(Foo => 1) }
67  qr{finalized req},
68  '...but we die if we try to put anything in it';
69
70my $clone = $prereqs->clone;
71
72isa_ok($clone, 'CPAN::Meta::Prereqs', 'cloned prereqs obj');
73
74ok(! $clone->is_finalized, 'cloned obj is not finalized');
75
76is_deeply($clone->as_string_hash, $prereqs_struct, '...it still round-trips');
77
78$clone->requirements_for(qw(runtime requires))->add_minimum(Cwd => 10);
79
80pass('...we can add minimum if it has no effect');
81
82$clone->requirements_for(qw(runtime requires))->add_minimum(Cwd => 1000);
83
84pass('...or if it has an effect');
85
86$clone->requirements_for(qw(develop suggests));
87
88pass('...we can get a V:R object for a previously unconfigured phase');
89
90$clone->requirements_for(qw(develop suggests))->add_minimum(Foo => 1);
91
92pass('...and we can add stuff to it');
93
94done_testing;
95# vim: ts=2 sts=2 sw=2 et :
96