xref: /openbsd-src/gnu/usr.bin/perl/cpan/CPAN-Meta/t/parse-cpan-meta/02_api.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
1*5759b3d2Safresh1#!/usr/bin/perl
2*5759b3d2Safresh1
3*5759b3d2Safresh1delete $ENV{PERL_YAML_BACKEND};
4*5759b3d2Safresh1delete $ENV{PERL_JSON_BACKEND};
5*5759b3d2Safresh1delete $ENV{CPAN_META_JSON_BACKEND};
6*5759b3d2Safresh1delete $ENV{CPAN_META_JSON_DECODER};
7*5759b3d2Safresh1
8*5759b3d2Safresh1# Testing of a known-bad file from an editor
9*5759b3d2Safresh1
10*5759b3d2Safresh1use strict;
11*5759b3d2Safresh1BEGIN {
12*5759b3d2Safresh1	$|  = 1;
13*5759b3d2Safresh1	$^W = 1;
14*5759b3d2Safresh1}
15*5759b3d2Safresh1
16*5759b3d2Safresh1use lib 't/lib';
17*5759b3d2Safresh1use File::Spec::Functions ':ALL';
18*5759b3d2Safresh1use Parse::CPAN::Meta;
19*5759b3d2Safresh1use Parse::CPAN::Meta::Test;
20*5759b3d2Safresh1# use Test::More skip_all => 'Temporarily ignoring failing test';
21*5759b3d2Safresh1use Test::More 'no_plan';
22*5759b3d2Safresh1use utf8;
23*5759b3d2Safresh1
24*5759b3d2Safresh1#####################################################################
25*5759b3d2Safresh1# Testing that Perl::Smith config files work
26*5759b3d2Safresh1
27*5759b3d2Safresh1my $want = {
28*5759b3d2Safresh1  "abstract" => "a set of version requirements for a CPAN dist",
29*5759b3d2Safresh1  "author"   => [ 'Ricardo Signes <rjbs@cpan.org>' ],
30*5759b3d2Safresh1  "build_requires" => {
31*5759b3d2Safresh1     "Test::More" => "0.88"
32*5759b3d2Safresh1  },
33*5759b3d2Safresh1  "configure_requires" => {
34*5759b3d2Safresh1     "ExtUtils::MakeMaker" => "6.31"
35*5759b3d2Safresh1  },
36*5759b3d2Safresh1  "generated_by" => "Dist::Zilla version 2.100991",
37*5759b3d2Safresh1  "license" => "perl",
38*5759b3d2Safresh1  "meta-spec" => {
39*5759b3d2Safresh1     "url" => "http://module-build.sourceforge.net/META-spec-v1.4.html",
40*5759b3d2Safresh1     "version" => 1.4
41*5759b3d2Safresh1  },
42*5759b3d2Safresh1  "name" => "Version-Requirements",
43*5759b3d2Safresh1  "recommends" => {},
44*5759b3d2Safresh1  "requires" => {
45*5759b3d2Safresh1     "Carp" => "0",
46*5759b3d2Safresh1     "Scalar::Util" => "0",
47*5759b3d2Safresh1     "version" => "0.77"
48*5759b3d2Safresh1  },
49*5759b3d2Safresh1  "resources" => {
50*5759b3d2Safresh1     "repository" => "git://git.codesimply.com/Version-Requirements.git"
51*5759b3d2Safresh1  },
52*5759b3d2Safresh1  "version" => "0.101010",
53*5759b3d2Safresh1  "x_contributors" => [
54*5759b3d2Safresh1    "Dagfinn Ilmari Mannsåker <ilmari\@ilmari.org>",
55*5759b3d2Safresh1  ],
56*5759b3d2Safresh1};
57*5759b3d2Safresh1
58*5759b3d2Safresh1my $meta_json = catfile( test_data_directory(), 'META-VR.json' );
59*5759b3d2Safresh1my $meta_yaml = catfile( test_data_directory(), 'META-VR.yml' );
60*5759b3d2Safresh1my $bare_yaml_meta = catfile( test_data_directory(), 'bareyaml.meta' );
61*5759b3d2Safresh1my $bad_yaml_meta = catfile( test_data_directory(), 'BadMETA.yml' );
62*5759b3d2Safresh1my $CL018_yaml_meta = catfile( test_data_directory(), 'CL018_yaml.meta' );
63*5759b3d2Safresh1
64*5759b3d2Safresh1# These test YAML/JSON detection without the typical file name suffix
65*5759b3d2Safresh1my $yaml_meta = catfile( test_data_directory(), 'yaml.meta' );
66*5759b3d2Safresh1my $json_meta = catfile( test_data_directory(), 'json.meta' );
67*5759b3d2Safresh1
68*5759b3d2Safresh1### YAML tests
69*5759b3d2Safresh1{
70*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
71*5759b3d2Safresh1
72*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
73*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_file( $meta_yaml );
74*5759b3d2Safresh1  is_deeply($from_yaml, $want, "load from YAML file results in expected data");
75*5759b3d2Safresh1}
76*5759b3d2Safresh1
77*5759b3d2Safresh1{
78*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
79*5759b3d2Safresh1
80*5759b3d2Safresh1  note '';
81*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
82*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_file( $yaml_meta );
83*5759b3d2Safresh1  is_deeply($from_yaml, $want, "load from YAML .meta file results in expected data");
84*5759b3d2Safresh1}
85*5759b3d2Safresh1
86*5759b3d2Safresh1{
87*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
88*5759b3d2Safresh1
89*5759b3d2Safresh1  note '';
90*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
91*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_file( $bare_yaml_meta );
92*5759b3d2Safresh1  is_deeply($from_yaml, $want, "load from bare YAML .meta file results in expected data");
93*5759b3d2Safresh1}
94*5759b3d2Safresh1
95*5759b3d2Safresh1{
96*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
97*5759b3d2Safresh1
98*5759b3d2Safresh1  note '';
99*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
100*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_file( $CL018_yaml_meta );
101*5759b3d2Safresh1  like($from_yaml->{x_contributors}[5], qr/Olivier Mengu/, "Open question: what to expect from double encoded UTF-8");
102*5759b3d2Safresh1}
103*5759b3d2Safresh1
104*5759b3d2Safresh1{
105*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
106*5759b3d2Safresh1
107*5759b3d2Safresh1  note '';
108*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
109*5759b3d2Safresh1  my $yaml   = load_ok( $meta_yaml, $meta_yaml, 100, ":encoding(UTF-8)");
110*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_yaml_string( $yaml );
111*5759b3d2Safresh1  is_deeply($from_yaml, $want, "load from YAML str results in expected data");
112*5759b3d2Safresh1}
113*5759b3d2Safresh1
114*5759b3d2Safresh1{
115*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get CPAN::META::YAML
116*5759b3d2Safresh1
117*5759b3d2Safresh1  note '';
118*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'CPAN::Meta::YAML', 'yaml_backend(): CPAN::Meta::YAML');
119*5759b3d2Safresh1  my @yaml   = Parse::CPAN::Meta::LoadFile( $bad_yaml_meta );
120*5759b3d2Safresh1  is($yaml[0]{author}[0], 'Olivier Mengu\xE9', "Bad UTF-8 is replaced");
121*5759b3d2Safresh1}
122*5759b3d2Safresh1
123*5759b3d2Safresh1
124*5759b3d2Safresh1SKIP: {
125*5759b3d2Safresh1  note '';
126*5759b3d2Safresh1  skip 'these tests are for cpan builds only', 2 if $ENV{PERL_CORE};
127*5759b3d2Safresh1  skip "YAML module not installed", 2
128*5759b3d2Safresh1    unless eval "require YAML; 1";
129*5759b3d2Safresh1  local $ENV{PERL_YAML_BACKEND} = 'YAML';
130*5759b3d2Safresh1
131*5759b3d2Safresh1  is(Parse::CPAN::Meta->yaml_backend(), 'YAML', 'yaml_backend(): YAML');
132*5759b3d2Safresh1  my $yaml   = load_ok( $meta_yaml, $meta_yaml, 100, ":encoding(UTF-8)");
133*5759b3d2Safresh1  my $from_yaml = Parse::CPAN::Meta->load_yaml_string( $yaml );
134*5759b3d2Safresh1  is_deeply($from_yaml, $want, "load_yaml_string using PERL_YAML_BACKEND");
135*5759b3d2Safresh1}
136*5759b3d2Safresh1
137*5759b3d2Safresh1### JSON tests
138*5759b3d2Safresh1{
139*5759b3d2Safresh1  # JSON tests with JSON::PP
140*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get JSON::PP
141*5759b3d2Safresh1
142*5759b3d2Safresh1  note '';
143*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON::PP', 'json_backend(): JSON::PP');
144*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_file( $meta_json );
145*5759b3d2Safresh1  is_deeply($from_json, $want, "load from JSON file results in expected data");
146*5759b3d2Safresh1}
147*5759b3d2Safresh1
148*5759b3d2Safresh1{
149*5759b3d2Safresh1  # JSON tests with JSON::PP
150*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get JSON::PP
151*5759b3d2Safresh1
152*5759b3d2Safresh1  note '';
153*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON::PP', 'json_backend(): JSON::PP');
154*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_file( $json_meta );
155*5759b3d2Safresh1  is_deeply($from_json, $want, "load from JSON .meta file results in expected data");
156*5759b3d2Safresh1}
157*5759b3d2Safresh1
158*5759b3d2Safresh1{
159*5759b3d2Safresh1  # JSON tests with JSON::PP
160*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} if not $ENV{PERL_CORE}; # ensure we always get JSON::PP
161*5759b3d2Safresh1
162*5759b3d2Safresh1  note '';
163*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON::PP', 'json_backend(): JSON::PP');
164*5759b3d2Safresh1  my $json   = load_ok( $meta_json, $meta_json, 100, "encoding(UTF-8)");
165*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_json_string( $json );
166*5759b3d2Safresh1  is_deeply($from_json, $want, "load from JSON str results in expected data");
167*5759b3d2Safresh1}
168*5759b3d2Safresh1
169*5759b3d2Safresh1{
170*5759b3d2Safresh1  # JSON tests with JSON::PP, take 2
171*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} = 0 if not $ENV{PERL_CORE}; # request JSON::PP
172*5759b3d2Safresh1
173*5759b3d2Safresh1  note '';
174*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON::PP', 'json_backend(): JSON::PP');
175*5759b3d2Safresh1  my $json   = load_ok( $meta_json, $meta_json, 100, ":encoding(UTF-8)");
176*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_json_string( $json );
177*5759b3d2Safresh1  is_deeply($from_json, $want, "load_json_string with PERL_JSON_BACKEND = 0");
178*5759b3d2Safresh1}
179*5759b3d2Safresh1
180*5759b3d2Safresh1{
181*5759b3d2Safresh1  # JSON tests with JSON::PP, take 3
182*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} = 'JSON::PP' if not $ENV{PERL_CORE}; # request JSON::PP
183*5759b3d2Safresh1
184*5759b3d2Safresh1  note '';
185*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON::PP', 'json_backend(): JSON::PP');
186*5759b3d2Safresh1  my $json   = load_ok( $meta_json, $meta_json, 100, ":encoding(UTF-8)");
187*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_json_string( $json );
188*5759b3d2Safresh1  is_deeply($from_json, $want, "load_json_string with PERL_JSON_BACKEND = 'JSON::PP'");
189*5759b3d2Safresh1}
190*5759b3d2Safresh1
191*5759b3d2Safresh1SKIP: {
192*5759b3d2Safresh1  # JSON tests with fake backend
193*5759b3d2Safresh1
194*5759b3d2Safresh1  note '';
195*5759b3d2Safresh1  skip 'these tests are for cpan builds only', 2 if $ENV{PERL_CORE};
196*5759b3d2Safresh1
197*5759b3d2Safresh1  { package MyJSONThingy; $INC{'MyJSONThingy.pm'} = __FILE__; require JSON::PP;
198*5759b3d2Safresh1    sub decode_json { JSON::PP::decode_json(@_) } }
199*5759b3d2Safresh1
200*5759b3d2Safresh1  local $ENV{CPAN_META_JSON_DECODER} = 'MyJSONThingy'; # request fake backend
201*5759b3d2Safresh1
202*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_decoder(), 'MyJSONThingy', 'json_decoder(): MyJSONThingy');
203*5759b3d2Safresh1  my $json   = load_ok( $meta_json, $meta_json, 100, ":encoding(UTF-8)");
204*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_json_string( $json );
205*5759b3d2Safresh1  is_deeply($from_json, $want, "load_json_string with PERL_JSON_DECODER = 'MyJSONThingy'");
206*5759b3d2Safresh1}
207*5759b3d2Safresh1
208*5759b3d2Safresh1SKIP: {
209*5759b3d2Safresh1  note '';
210*5759b3d2Safresh1  skip 'these tests are for cpan builds only', 2 if $ENV{PERL_CORE};
211*5759b3d2Safresh1  skip "JSON module version 2.5 not installed", 2
212*5759b3d2Safresh1    unless eval "require JSON; JSON->VERSION(2.5); 1";
213*5759b3d2Safresh1  local $ENV{PERL_JSON_BACKEND} = 1;
214*5759b3d2Safresh1
215*5759b3d2Safresh1  is(Parse::CPAN::Meta->json_backend(), 'JSON', 'json_backend(): JSON');
216*5759b3d2Safresh1  my $json   = load_ok( $meta_json, $meta_json, 100, ":encoding(UTF-8)");
217*5759b3d2Safresh1  my $from_json = Parse::CPAN::Meta->load_json_string( $json );
218*5759b3d2Safresh1  is_deeply($from_json, $want, "load_json_string with PERL_JSON_BACKEND = 1");
219*5759b3d2Safresh1}
220*5759b3d2Safresh1
221