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