From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
use Test::More 0.88;
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',
},
],
['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' => {
version => '1.4'
},
name => 'DZT-Sample',
resources => {
homepage => 'http://example.com',
bugtracker => 'http://bugs.example.com',
},
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' => {
version => '1.4'
},
name => 'DZT-Sample',
resources => {
homepage => 'http://example.com',
bugtracker => 'http://bugs.example.com',
},
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 => {
mailto => 'project@bugs.example.com',
},
homepage => 'http://example.com',
repository => {
type => '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'
);
}
done_testing;