use strict; use warnings; use Test::More 0.88; use Test::DZil; use Test::Deep; use CPAN::Meta::Converter; my $generated_by = 'Dist::Zilla::Tester version ' . (Builder->VERSION || '(undef)'); my $converted_by = "CPAN::Meta::Converter version " . CPAN::Meta::Converter->VERSION; my $generated_by_re = qr/\A\Q$generated_by\E(?:, \Q$converted_by\E)?\z/; my $serialization_yaml = 'YAML::Tiny version ' . YAML::Tiny->VERSION; my $json_backend = JSON::MaybeXS::JSON(); my $serialization_json = $json_backend . ' version ' . $json_backend->VERSION; { my $tzil = Builder->from_config( { dist_root => 'corpus/dist/DZT' }, { add_files => { 'source/dist.ini' => simple_ini( [ 'MetaResources' => { homepage => 'http://example.com', bugtracker => 'http://bugs.example.com', repository => 'git://example.com/project.git', }, ], ['MetaYAML'], ['MetaJSON'], ), }, }, ); eval { $tzil->build }; ok(!$@, 'no errors from old-style bugtracker and repository for MetaResources'); is_yaml( $tzil->slurp_file('build/META.yml'), { abstract => 'Sample DZ Dist', author => ['E. Xavier Ample <example@example.org>'], build_requires => {}, dynamic_config => 0, generated_by => re($generated_by_re), license => 'perl', 'meta-spec' => { url => 'http://module-build.sourceforge.net/META-spec-v1.4.html', version => '1.4' }, name => 'DZT-Sample', resources => { homepage => 'http://example.com', bugtracker => 'http://bugs.example.com', repository => 'git://example.com/project.git', }, version => '0.001', x_generated_by_perl => "$^V", x_serialization_backend => $serialization_yaml, x_spdx_expression => 'Artistic-1.0-Perl OR GPL-1.0-or-later', }, 'META.yml matches expected 1.4 spec output' ); is_json( $tzil->slurp_file('build/META.json'), { abstract => 'Sample DZ Dist', author => ['E. Xavier Ample <example@example.org>'], dynamic_config => 0, generated_by => re($generated_by_re), license => [ 'perl_5' ], 'meta-spec' => { url => re(qr/^http.*CPAN::Meta::Spec$/), version => 2 }, name => 'DZT-Sample', prereqs => {}, release_status => 'stable', resources => { bugtracker => { web => 'http://bugs.example.com' }, homepage => 'http://example.com', repository => superhashof({ url => 'git://example.com/project.git' }), }, version => '0.001', x_generated_by_perl => "$^V", x_serialization_backend => $serialization_json, x_spdx_expression => 'Artistic-1.0-Perl OR GPL-1.0-or-later', }, 'META.json was 2.0 output, old-style resources were upgraded' ); } { my $tzil = Builder->from_config( { dist_root => 'corpus/dist/DZT' }, { add_files => { 'source/dist.ini' => simple_ini( [ 'MetaResources' => { homepage => 'http://example.com', 'bugtracker.web' => 'http://bugs.example.com', 'bugtracker.mailto' => 'project@bugs.example.com', 'repository.url' => 'git://example.com/project.git', 'repository.web' => 'http://example.com/git/project', 'repository.type' => 'git', }, ], ['MetaYAML'], ['MetaJSON'], ), }, }, ); eval { $tzil->build }; ok(!$@, 'no errors from new-style bugtracker and repository for MetaResources'); is_yaml( $tzil->slurp_file('build/META.yml'), { abstract => 'Sample DZ Dist', author => ['E. Xavier Ample <example@example.org>'], build_requires => {}, dynamic_config => 0, generated_by => re($generated_by_re), license => 'perl', 'meta-spec' => { url => 'http://module-build.sourceforge.net/META-spec-v1.4.html', version => '1.4' }, name => 'DZT-Sample', resources => { homepage => 'http://example.com', bugtracker => 'http://bugs.example.com', repository => 'git://example.com/project.git', }, version => '0.001', x_generated_by_perl => "$^V", x_serialization_backend => $serialization_yaml, x_spdx_expression => 'Artistic-1.0-Perl OR GPL-1.0-or-later', }, 'META.yml matches expected 1.4 spec output, new style resources were down-graded' ); is_json( $tzil->slurp_file('build/META.json'), { abstract => 'Sample DZ Dist', author => ['E. Xavier Ample <example@example.org>'], dynamic_config => 0, generated_by => re($generated_by_re), license => [ 'perl_5' ], 'meta-spec' => { url => re(qr/^http.*CPAN::Meta::Spec$/), version => 2 }, name => 'DZT-Sample', prereqs => {}, release_status => 'stable', resources => { bugtracker => { web => 'http://bugs.example.com', mailto => 'project@bugs.example.com', }, homepage => 'http://example.com', repository => { type => 'git', url => 'git://example.com/project.git', web => 'http://example.com/git/project', } }, version => '0.001', x_generated_by_perl => "$^V", x_serialization_backend => $serialization_json, x_spdx_expression => 'Artistic-1.0-Perl OR GPL-1.0-or-later', }, 'META.json was 2.0 output' ); } done_testing;