The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
my $tmpdir = File::Temp->newdir(CLEANUP => 1);
plan skip_all => "tmpdir is not ready" unless -e $tmpdir && -w $tmpdir;
my $pmfile = "$tmpdir/Test.pm";
my @package = (qw/Parse PMFile Test/);
my @subpackages = (qw/Location Blah Thing/);
my $parser = Parse::PMFile->new;
subtest 'arisdottle' => sub {
_generate_package(q{::});
my $info = $parser->parse($pmfile);
_check_packages($info);
};
subtest 'quote' => sub {
_generate_package(q{'});
my $info = $parser->parse($pmfile);
_check_packages($info);
};
done_testing;
sub _generate_package {
my ($sep) = @_;
my $version = 1;
open my $fh, '>', $pmfile or plan skip_all => "Failed to create a pmfile";
print $fh 'package ' . join($sep, @package) . ";\n";
print $fh q{our $VERSION = '1.0} . $version++ . "';\n1;\n";
for my $subpackage (@subpackages) {
print $fh 'package ' . join($sep, @package, $subpackage) . ";\n";
print $fh q{our $VERSION = '1.0} . $version++ . "';\n1;\n";
}
close $fh;
}
sub _check_packages {
my ($info) = @_;
my $package = join(q{::}, @package);
ok exists $info->{$package}, q{found base package};
for my $subpackage (@subpackages) {
ok exists $info->{$package . q{::} . $subpackage}, qq{found sub package $subpackage};
}
}