|
Packit |
6539e1 |
# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
|
|
Packit |
6539e1 |
# vim:ts=8:sw=2:et:sta:sts=2
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
use strict;
|
|
Packit |
6539e1 |
use warnings;
|
|
Packit |
6539e1 |
use Test::More 0.82;
|
|
Packit |
6539e1 |
use IO::File;
|
|
Packit |
6539e1 |
use File::Spec;
|
|
Packit |
6539e1 |
use File::Temp;
|
|
Packit |
6539e1 |
use File::Basename;
|
|
Packit |
6539e1 |
use Cwd ();
|
|
Packit |
6539e1 |
use File::Path;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
plan tests => 70;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
require_ok('Module::Metadata');
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# class method C<find_module_by_name>
|
|
Packit |
6539e1 |
my $module = Module::Metadata->find_module_by_name(
|
|
Packit |
6539e1 |
'Module::Metadata' );
|
|
Packit |
6539e1 |
ok( -e $module, 'find_module_by_name() succeeds' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
#########################
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
BEGIN {
|
|
Packit |
6539e1 |
my $cwd = File::Spec->rel2abs(Cwd::cwd);
|
|
Packit |
6539e1 |
sub original_cwd { return $cwd }
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# Set up a temp directory
|
|
Packit |
6539e1 |
sub tmpdir {
|
|
Packit |
6539e1 |
my (@args) = @_;
|
|
Packit |
6539e1 |
my $dir = $ENV{PERL_CORE} ? original_cwd : File::Spec->tmpdir;
|
|
Packit |
6539e1 |
return File::Temp::tempdir('MMD-XXXXXXXX', CLEANUP => 0, DIR => $dir, @args);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $tmp;
|
|
Packit |
6539e1 |
BEGIN { $tmp = tmpdir; note "using temp dir $tmp"; }
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
END {
|
|
Packit |
6539e1 |
die "tests failed; leaving temp dir $tmp behind"
|
|
Packit |
6539e1 |
if $ENV{AUTHOR_TESTING} and not Test::Builder->new->is_passing;
|
|
Packit |
6539e1 |
note "removing temp dir $tmp";
|
|
Packit |
6539e1 |
chdir original_cwd;
|
|
Packit |
6539e1 |
File::Path::rmtree($tmp);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# generates a new distribution:
|
|
Packit |
6539e1 |
# files => { relative filename => $content ... }
|
|
Packit |
6539e1 |
# returns the name of the distribution (not including version),
|
|
Packit |
6539e1 |
# and the absolute path name to the dist.
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $test_num = 0;
|
|
Packit |
6539e1 |
sub new_dist {
|
|
Packit |
6539e1 |
my %opts = @_;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $distname = 'Simple' . $test_num++;
|
|
Packit |
6539e1 |
my $distdir = File::Spec->catdir($tmp, $distname);
|
|
Packit |
6539e1 |
note "using dist $distname in $distdir";
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
File::Path::mkpath($distdir) or die "failed to create '$distdir'";
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
foreach my $rel_filename (keys %{$opts{files}})
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $abs_filename = File::Spec->catfile($distdir, $rel_filename);
|
|
Packit |
6539e1 |
my $dirname = File::Basename::dirname($abs_filename);
|
|
Packit |
6539e1 |
unless (-d $dirname) {
|
|
Packit |
6539e1 |
File::Path::mkpath($dirname) or die "Can't create '$dirname'";
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
note "creating $abs_filename";
|
|
Packit |
6539e1 |
my $fh = IO::File->new(">$abs_filename") or die "Can't write '$abs_filename'\n";
|
|
Packit |
6539e1 |
print $fh $opts{files}{$rel_filename};
|
|
Packit |
6539e1 |
close $fh;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
chdir $distdir;
|
|
Packit |
6539e1 |
return ($distname, $distdir);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# fail on invalid module name
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_module(
|
|
Packit |
6539e1 |
'Foo::Bar', inc => [] );
|
|
Packit |
6539e1 |
ok( !defined( $pm_info ), 'fail if can\'t find module by module name' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# fail on invalid filename
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile( 'Foo', 'Bar.pm' );
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file( $file, inc => [] );
|
|
Packit |
6539e1 |
ok( !defined( $pm_info ), 'fail if can\'t find module by file name' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => "package Simple;\n" });
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# construct from module filename
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file( $file );
|
|
Packit |
6539e1 |
ok( defined( $pm_info ), 'new_from_file() succeeds' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# construct from filehandle
|
|
Packit |
6539e1 |
my $handle = IO::File->new($file);
|
|
Packit |
6539e1 |
$pm_info = Module::Metadata->new_from_handle( $handle, $file );
|
|
Packit |
6539e1 |
ok( defined( $pm_info ), 'new_from_handle() succeeds' );
|
|
Packit |
6539e1 |
$pm_info = Module::Metadata->new_from_handle( $handle );
|
|
Packit |
6539e1 |
is( $pm_info, undef, "new_from_handle() without filename returns undef" );
|
|
Packit |
6539e1 |
close($handle);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# construct from module name, using custom include path
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_module(
|
|
Packit |
6539e1 |
'Simple', inc => [ 'lib', @INC ] );
|
|
Packit |
6539e1 |
ok( defined( $pm_info ), 'new_from_module() succeeds' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# Find each package only once
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
package Error::Simple;
|
|
Packit |
6539e1 |
$VERSION = '2.34';
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file( $file );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my @packages = $pm_info->packages_inside;
|
|
Packit |
6539e1 |
is( @packages, 2, 'record only one occurence of each package' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# Module 'Simple.pm' does not contain package 'Simple';
|
|
Packit |
6539e1 |
# constructor should not complain, no default module name or version
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple::Not;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file( $file );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $pm_info->name, undef, 'no default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, undef, 'no version w/o default package' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# parse $VERSION lines scripts for package main
|
|
Packit |
6539e1 |
my @scripts = (
|
|
Packit |
6539e1 |
<<'---', # package main declared
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
package main;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # on first non-comment line, non declared package main
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # after non-comment line
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
use strict;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # 1st declared package
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
package main;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
package _private;
|
|
Packit |
6539e1 |
$VERSION = '999';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # 2nd declared package
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
package _private;
|
|
Packit |
6539e1 |
$VERSION = '999';
|
|
Packit |
6539e1 |
package main;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # split package
|
|
Packit |
6539e1 |
#!perl -w
|
|
Packit |
6539e1 |
package main;
|
|
Packit |
6539e1 |
package _private;
|
|
Packit |
6539e1 |
$VERSION = '999';
|
|
Packit |
6539e1 |
package main;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # define 'main' version from other package
|
|
Packit |
6539e1 |
package _private;
|
|
Packit |
6539e1 |
$::VERSION = 0.01;
|
|
Packit |
6539e1 |
$VERSION = '999';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
<<'---', # define 'main' version from other package
|
|
Packit |
6539e1 |
package _private;
|
|
Packit |
6539e1 |
$VERSION = '999';
|
|
Packit |
6539e1 |
$::VERSION = 0.01;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
);
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my ( $i, $n ) = ( 1, scalar( @scripts ) );
|
|
Packit |
6539e1 |
foreach my $script ( @scripts ) {
|
|
Packit |
6539e1 |
note '-------';
|
|
Packit |
6539e1 |
my $errs;
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('bin', 'simple.plx');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => $script } );
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file( $file );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $pm_info->name, 'main', 'name for script is always main');
|
|
Packit |
6539e1 |
is( $pm_info->version, '0.01', "correct script version ($i of $n)" ) or $errs++;
|
|
Packit |
6539e1 |
$i++;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
diag 'parsed module: ', explain($pm_info) if !$ENV{PERL_CORE} && $errs;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# examine properties of a module: name, pod, etc
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
package Simple::Ex;
|
|
Packit |
6539e1 |
$VERSION = '0.02';
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=head1 NAME
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
Simple - It's easy.
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=head1 AUTHOR
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
Simple Simon
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
You can find me on the IRC channel
|
|
Packit |
6539e1 |
#simon on irc.perl.org.
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=cut
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_module(
|
|
Packit |
6539e1 |
'Simple', inc => [ 'lib', @INC ] );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $pm_info->name, 'Simple', 'found default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, '0.01', 'version for default package' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# got correct version for secondary package
|
|
Packit |
6539e1 |
is( $pm_info->version( 'Simple::Ex' ), '0.02',
|
|
Packit |
6539e1 |
'version for secondary package' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $filename = $pm_info->filename;
|
|
Packit |
6539e1 |
ok( defined( $filename ) && -e $filename,
|
|
Packit |
6539e1 |
'filename() returns valid path to module file' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my @packages = $pm_info->packages_inside;
|
|
Packit |
6539e1 |
is( @packages, 2, 'found correct number of packages' );
|
|
Packit |
6539e1 |
is( $packages[0], 'Simple', 'packages stored in order found' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# we can detect presence of pod regardless of whether we are collecting it
|
|
Packit |
6539e1 |
ok( $pm_info->contains_pod, 'contains_pod() succeeds' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my @pod = $pm_info->pod_inside;
|
|
Packit |
6539e1 |
is_deeply( \@pod, [qw(NAME AUTHOR)], 'found all pod sections' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $pm_info->pod('NONE') , undef,
|
|
Packit |
6539e1 |
'return undef() if pod section not present' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $pm_info->pod('NAME'), undef,
|
|
Packit |
6539e1 |
'return undef() if pod section not collected' );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# collect_pod
|
|
Packit |
6539e1 |
$pm_info = Module::Metadata->new_from_module(
|
|
Packit |
6539e1 |
'Simple', inc => [ 'lib', @INC ], collect_pod => 1 );
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my %pod;
|
|
Packit |
6539e1 |
for my $section (qw(NAME AUTHOR)) {
|
|
Packit |
6539e1 |
my $content = $pm_info->pod( $section );
|
|
Packit |
6539e1 |
if ( $content ) {
|
|
Packit |
6539e1 |
$content =~ s/^\s+//;
|
|
Packit |
6539e1 |
$content =~ s/\s+$//;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
$pod{$section} = $content;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
my %expected = (
|
|
Packit |
6539e1 |
NAME => q|Simple - It's easy.|,
|
|
Packit |
6539e1 |
AUTHOR => <<'EXPECTED'
|
|
Packit |
6539e1 |
Simple Simon
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
You can find me on the IRC channel
|
|
Packit |
6539e1 |
#simon on irc.perl.org.
|
|
Packit |
6539e1 |
EXPECTED
|
|
Packit |
6539e1 |
);
|
|
Packit |
6539e1 |
for my $text (values %expected) {
|
|
Packit |
6539e1 |
$text =~ s/^\s+//;
|
|
Packit |
6539e1 |
$text =~ s/\s+$//;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
is( $pod{NAME}, $expected{NAME}, 'collected NAME pod section' );
|
|
Packit |
6539e1 |
is( $pod{AUTHOR}, $expected{AUTHOR}, 'collected AUTHOR pod section' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# test things that look like POD, but aren't
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=YES THIS STARTS POD
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
our $VERSION = '999';
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=cute
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
our $VERSION = '666';
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=cut
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
*foo
|
|
Packit |
6539e1 |
=*no_this_does_not_start_pod;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, 'Simple', 'found default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, '1.23', 'version for default package' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $tmpdir = GeneratePackage::tmpdir();
|
|
Packit |
6539e1 |
my $undef;
|
|
Packit |
6539e1 |
my $test_num = 0;
|
|
Packit |
6539e1 |
use lib 't/lib';
|
|
Packit |
6539e1 |
use GeneratePackage;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# and now a real pod file
|
|
Packit |
6539e1 |
# (this test case is ready to be rolled into a corpus loop, later)
|
|
Packit |
6539e1 |
my $test_case = {
|
|
Packit |
6539e1 |
name => 'file only contains pod',
|
|
Packit |
6539e1 |
filename => 'Simple/Documentation.pod',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
# PODNAME: Simple::Documentation
|
|
Packit |
6539e1 |
# ABSTRACT: My documentation
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=pod
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
Hello, this is pod.
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=cut
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
module => '', # TODO: should probably be $undef actually
|
|
Packit |
6539e1 |
all_versions => { },
|
|
Packit |
6539e1 |
};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
note $test_case->{name};
|
|
Packit |
6539e1 |
my $code = $test_case->{code};
|
|
Packit |
6539e1 |
my $expected_name = $test_case->{module};
|
|
Packit |
6539e1 |
local $TODO = $test_case->{TODO};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $errs;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my ($vol, $dir, $basename) = File::Spec->splitpath(File::Spec->catfile($tmpdir, "Simple${test_num}", ($test_case->{filename} || 'Simple.pm')));
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file(generate_file($dir, $basename, $code));
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $got_name = $pm_info->name;
|
|
Packit |
6539e1 |
is(
|
|
Packit |
6539e1 |
$got_name,
|
|
Packit |
6539e1 |
$expected_name,
|
|
Packit |
6539e1 |
"case '$test_case->{name}': module name matches",
|
|
Packit |
6539e1 |
)
|
|
Packit |
6539e1 |
or $errs++;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
diag 'parsed module: ', explain($pm_info) if !$ENV{PERL_CORE} && $errs;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# Make sure processing stops after __DATA__
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
__DATA__
|
|
Packit |
6539e1 |
*UNIVERSAL::VERSION = sub {
|
|
Packit |
6539e1 |
foo();
|
|
Packit |
6539e1 |
};
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, 'Simple', 'found default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, '0.01', 'version for default package' );
|
|
Packit |
6539e1 |
my @packages = $pm_info->packages_inside;
|
|
Packit |
6539e1 |
is_deeply(\@packages, ['Simple'], 'packages inside');
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
# Make sure we handle version.pm $VERSIONs well
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = version->new('0.60.' . (qw$Revision: 128 $)[1]);
|
|
Packit |
6539e1 |
package Simple::Simon;
|
|
Packit |
6539e1 |
$VERSION = version->new('0.61.' . (qw$Revision: 129 $)[1]);
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, 'Simple', 'found default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, '0.60.128', 'version for default package' );
|
|
Packit |
6539e1 |
my @packages = $pm_info->packages_inside;
|
|
Packit |
6539e1 |
is_deeply([sort @packages], ['Simple', 'Simple::Simon'], 'packages inside');
|
|
Packit |
6539e1 |
is( $pm_info->version('Simple::Simon'), '0.61.129', 'version for embedded package' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# check that package_versions_from_directory works
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
package Simple::Ex;
|
|
Packit |
6539e1 |
$VERSION = '0.02';
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
package main; # should ignore this
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
package DB; # should ignore this
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
package Simple::_private; # should ignore this
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=head1 NAME
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
Simple - It's easy.
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=head1 AUTHOR
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
Simple Simon
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
=cut
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $exp_pvfd = {
|
|
Packit |
6539e1 |
'Simple' => {
|
|
Packit |
6539e1 |
'file' => 'Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.01'
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
'Simple::Ex' => {
|
|
Packit |
6539e1 |
'file' => 'Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.02'
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $got_pvfd = Module::Metadata->package_versions_from_directory('lib');
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is_deeply( $got_pvfd, $exp_pvfd, "package_version_from_directory()" )
|
|
Packit |
6539e1 |
or diag explain $got_pvfd;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $got_provides = Module::Metadata->provides(dir => 'lib', version => 2);
|
|
Packit |
6539e1 |
my $exp_provides = {
|
|
Packit |
6539e1 |
'Simple' => {
|
|
Packit |
6539e1 |
'file' => 'lib/Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.01'
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
'Simple::Ex' => {
|
|
Packit |
6539e1 |
'file' => 'lib/Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.02'
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is_deeply( $got_provides, $exp_provides, "provides()" )
|
|
Packit |
6539e1 |
or diag explain $got_provides;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $got_provides = Module::Metadata->provides(dir => 'lib', prefix => 'other', version => 1.4);
|
|
Packit |
6539e1 |
my $exp_provides = {
|
|
Packit |
6539e1 |
'Simple' => {
|
|
Packit |
6539e1 |
'file' => 'other/Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.01'
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
'Simple::Ex' => {
|
|
Packit |
6539e1 |
'file' => 'other/Simple.pm',
|
|
Packit |
6539e1 |
'version' => '0.02'
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is_deeply( $got_provides, $exp_provides, "provides()" )
|
|
Packit |
6539e1 |
or diag explain $got_provides;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# Check package_versions_from_directory with regard to case-sensitivity
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, undef, 'no default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, undef, 'version for default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version('simple'), '0.01', 'version for lower-case package' );
|
|
Packit |
6539e1 |
is( $pm_info->version('Simple'), undef, 'version for capitalized package' );
|
|
Packit |
6539e1 |
ok( $pm_info->is_indexable(), 'an indexable package is found' );
|
|
Packit |
6539e1 |
ok( $pm_info->is_indexable('simple'), 'the simple package is indexable' );
|
|
Packit |
6539e1 |
ok( !$pm_info->is_indexable('Simple'), 'the Simple package would not be indexed' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '0.02';
|
|
Packit |
6539e1 |
package SiMpLe;
|
|
Packit |
6539e1 |
$VERSION = '0.03';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, 'Simple', 'found default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version, '0.02', 'version for default package' );
|
|
Packit |
6539e1 |
is( $pm_info->version('simple'), '0.01', 'version for lower-case package' );
|
|
Packit |
6539e1 |
is( $pm_info->version('Simple'), '0.02', 'version for capitalized package' );
|
|
Packit |
6539e1 |
is( $pm_info->version('SiMpLe'), '0.03', 'version for mixed-case package' );
|
|
Packit |
6539e1 |
ok( $pm_info->is_indexable('simple'), 'the simple package is indexable' );
|
|
Packit |
6539e1 |
ok( $pm_info->is_indexable('Simple'), 'the Simple package is indexable' );
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
my $file = File::Spec->catfile('lib', 'Simple.pm');
|
|
Packit |
6539e1 |
my ($dist_name, $dist_dir) = new_dist(files => { $file => <<'---' } );
|
|
Packit |
6539e1 |
package ## hide from PAUSE
|
|
Packit |
6539e1 |
simple;
|
|
Packit |
6539e1 |
$VERSION = '0.01';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file('lib/Simple.pm');
|
|
Packit |
6539e1 |
is( $pm_info->name, undef, 'no package names found' );
|
|
Packit |
6539e1 |
ok( !$pm_info->is_indexable('simple'), 'the simple package would not be indexed' );
|
|
Packit |
6539e1 |
ok( !$pm_info->is_indexable('Simple'), 'the Simple package would not be indexed' );
|
|
Packit |
6539e1 |
ok( !$pm_info->is_indexable(), 'no indexable package is found' );
|
|
Packit |
6539e1 |
}
|