CPAN-Meta
view release on metacpan or search on metacpan
t/converter.t view on Meta::CPAN
my $path = File::Spec->catfile('t','data-test','gpl-1_4.yml');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded gpl-1_4.yml" );
my $cmc = CPAN::Meta::Converter->new( $original );
my $up_converted = $cmc->convert( version => 2 );
is_deeply ( $up_converted->{license},
[ "open_source" ],
"up converted 'gpl' to 'open_source'"
);
}
# specific test for upconverting resources
{
my $path = File::Spec->catfile('t','data-test','resources.yml');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded resources.yml" );
my $cmc = CPAN::Meta::Converter->new( $original );
my $converted = $cmc->convert( version => 2 );
is_deeply(
$converted->{resources},
{ x_MailingList => 'http://groups.google.com/group/www-mechanize-users',
x_Repository => 'http://code.google.com/p/www-mechanize/source',
homepage => 'http://code.google.com/p/www-mechanize/',
bugtracker => {web => 'http://code.google.com/p/www-mechanize/issues/list',},
license => ['http://dev.perl.org/licenses/'],
},
"upconversion of resources"
);
}
# specific test for round-tripping resources
{
my $path = File::Spec->catfile('t','data-test','resources.yml');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded resources.yml" );
my $cmc1 = CPAN::Meta::Converter->new( $original );
my $converted = $cmc1->convert( version => 2 );
my $cmc2 = CPAN::Meta::Converter->new( $converted );
my $roundtrip = $cmc2->convert( version => 1.4 );
is_deeply(
$roundtrip->{resources},
$original->{resources},
"round-trip of resources (1.4->2->1.4)"
);
}
# specific test for object conversion
{
my $path = File::Spec->catfile('t','data-test','resources.yml');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded resources.yml" );
$original->{version} = version->new("1.64");
$original->{no_index}{file} = File::StringObject->new(".gitignore");
pass( "replaced some data fields with objects" );
my $cmc = CPAN::Meta::Converter->new( $original );
ok( my $converted = $cmc->convert( version => 2 ), "conversion successful" );
}
# specific test for UTF-8 handling
{
my $path = File::Spec->catfile('t','data-test','unicode.yml');
my $original = CPAN::Meta->load_file( $path )
or die "Couldn't load $path";
ok( $original, "unicode.yml" );
my @authors = $original->authors;
like( $authors[0], qr/Williåms/, "Unicode characters preserved in authors" );
}
# specific test for version ranges
{
my @prereq_keys = qw(
prereqs requires build_requires configure_requires
recommends conflicts
);
for my $case ( qw/ 2 1_4 / ) {
my $suffix = $case eq 2 ? "$case.json" : "$case.yml";
my $version = $case;
$version =~ tr[_][.];
my $path = File::Spec->catfile('t','data-test','version-ranges-' . $suffix);
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded " . basename $path );
my $cmc = CPAN::Meta::Converter->new( $original );
my $converted = $cmc->convert( version => $version );
for my $h ( $original, $converted ) {
delete $h->{generated_by};
delete $h->{'meta-spec'}{url};
for my $k ( @prereq_keys ) {
_normalize_reqs($h->{$k}) if exists $h->{$k};
}
}
is_deeply( $converted, $original, "version ranges preserved in conversion" );
}
}
# specific test for version numbers
{
my $path = File::Spec->catfile('t','data-test','version-not-normal.json');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded " . basename $path );
my $cmc = CPAN::Meta::Converter->new( $original );
my $converted = $cmc->convert( version => 2 );
is( $converted->{prereqs}{runtime}{requires}{'File::Find'}, "v0.1.0", "normalize v0.1");
is( $converted->{prereqs}{runtime}{requires}{'File::Path'}, "v1.0.0", "normalize v1.0.0");
}
# specific test for missing provides version
{
my $path = File::Spec->catfile('t','data-test','provides-version-missing.json');
my $original = Parse::CPAN::Meta->load_file( $path );
ok( $original, "loaded " . basename $path );
my $cmc = CPAN::Meta::Converter->new( $original );
my $converted = $cmc->convert( version => 2 );
is_deeply( $converted->{provides}{"Foo::Bar"}, { file => "lib/Foo/Bar.pm", version => "0.27_02" },
"Foo::Bar provides correct"
);
is_deeply( $converted->{provides}{"Foo::Bar::Blah"}, { file => "lib/Foo/Bar/Blah.pm" },
"Foo::Bar::Blah provides correct"
);
is_deeply( $converted->{provides}{"Foo::Bar::Baz"}, { file => "lib/Foo/Bar/Baz.pm", version => "0.3" },
"Foo::Bar provides correct"
);
}
# CMR standardizes stuff in a way that makes it hard to test original vs final
( run in 1.022 second using v1.01-cache-2.11-cpan-39bf76dae61 )