Update CPAN-Meta to CPAN release 2.150005
[perl.git] / cpan / CPAN-Meta / t / save-load.t
1 use strict;
2 use warnings;
3 use Test::More 0.88;
4
5 use CPAN::Meta;
6 use File::Temp 0.20 ();
7 use Parse::CPAN::Meta 1.4400;
8
9 delete $ENV{$_} for qw/PERL_JSON_BACKEND PERL_YAML_BACKEND/; # use defaults
10
11 my $distmeta = {
12   name     => 'Module-Build',
13   abstract => 'Build and install Perl modules',
14   description =>  "Module::Build is a system for building, testing, "
15               .   "and installing Perl modules.  It is meant to be an "
16               .   "alternative to ExtUtils::MakeMaker... blah blah blah",
17   version  => '0.36',
18   author   => [
19     'Ken Williams <kwilliams@cpan.org>',
20     'Module-Build List <module-build@perl.org>', # additional contact
21   ],
22   release_status => 'stable',
23   license  => [ 'perl_5' ],
24   prereqs => {
25     runtime => {
26       requires => {
27         'perl'   => '5.006',
28         'Config' => '0',
29         'Cwd'    => '0',
30         'Data::Dumper' => '0',
31         'ExtUtils::Install' => '0',
32         'File::Basename' => '0',
33         'File::Compare'  => '0',
34         'File::Copy' => '0',
35         'File::Find' => '0',
36         'File::Path' => '0',
37         'File::Spec' => '0',
38         'IO::File'   => '0',
39       },
40       recommends => {
41         'Archive::Tar' => '1.00',
42         'ExtUtils::Install' => '0.3',
43         'ExtUtils::ParseXS' => '2.02',
44         'Pod::Text' => '0',
45         'YAML' => '0.35',
46       },
47     },
48     build => {
49       requires => {
50         'Test::More' => '0',
51       },
52     }
53   },
54   resources => {
55     license => ['http://dev.perl.org/licenses/'],
56   },
57   optional_features => {
58     domination => {
59       description => 'Take over the world',
60       prereqs     => {
61         develop => { requires => { 'Genius::Evil'     => '1.234' } },
62         runtime => { requires => { 'Machine::Weather' => '2.0'   } },
63       },
64     },
65   },
66   dynamic_config => 1,
67   keywords => [ qw/ toolchain cpan dual-life / ],
68   'meta-spec' => {
69     version => '2',
70     url     => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
71   },
72   generated_by => 'Module::Build version 0.36',
73 };
74
75 my $meta = CPAN::Meta->new( $distmeta );
76
77 my $tmpdir = File::Temp->newdir();
78 my $metafile = File::Spec->catfile( $tmpdir, 'META.json' );
79
80 ok( $meta->save($metafile), "save returns true" );
81 ok( -f $metafile, "save meta to file" );
82
83 ok( my $loaded = Parse::CPAN::Meta->load_file($metafile), 'load saved file' );
84 is($loaded->{name},     'Module-Build', 'name correct');
85
86 like(
87   $loaded->{x_serialization_backend},
88   qr/\AJSON::PP version [0-9]/,
89   "x_serialization_backend",
90 );
91
92 ok(
93   ! exists $meta->{x_serialization_backend},
94   "we didn't leak x_serialization_backend up into the saved struct",
95 );
96
97 ok( $loaded = Parse::CPAN::Meta->load_file('t/data-test/META-1_4.yml'), 'load META-1.4' );
98 is($loaded->{name},     'Module-Build', 'name correct');
99
100 # Test saving with conversion
101
102 my $metayml = File::Spec->catfile( $tmpdir, 'META.yml' );
103
104 $meta->save($metayml, {version => "1.4"});
105 ok( -f $metayml, "save meta to META.yml with conversion" );
106
107 ok( $loaded = Parse::CPAN::Meta->load_file($metayml), 'load saved file' );
108 is( $loaded->{name},     'Module-Build', 'name correct');
109 is( $loaded->{requires}{perl}, "5.006", 'prereq correct' );
110
111 like(
112   $loaded->{x_serialization_backend},
113   qr/\ACPAN::Meta::YAML version [0-9]/,
114   "x_serialization_backend",
115 );
116
117 ok(
118   ! exists $meta->{x_serialization_backend},
119   "we didn't leak x_serialization_backend up into the saved struct",
120 );
121
122 # file without suffix
123
124 ok( $loaded = CPAN::Meta->load_file('t/data-test/META-2.meta'), 'load_file META-2.meta' );
125
126 my $string = do { open my $fh, '<', 't/data-test/META-2.meta'; local $/; <$fh> };
127 ok( $loaded = CPAN::Meta->load_string($string), 'load META-2.meta from string' );
128
129 done_testing;
130 # vim: ts=2 sts=2 sw=2 et :