summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgregor herrmann <gregoa@debian.org>2023-06-27 17:37:40 +0200
committergregor herrmann <gregoa@debian.org>2023-06-27 17:37:40 +0200
commit01cdb968b25829f045a425d7316ad5cac163ed4e (patch)
tree20f4ac4925520d67653cbc4a14c4e29cb18ad1a4
parent02e150bf74e1eafb427a108ac0b1c9e70b0ccc1f (diff)
parentea52a5625df48545e1899a15474202c54aef59a7 (diff)
New upstream version 0.44
-rw-r--r--Changes3
-rw-r--r--MANIFEST3
-rw-r--r--META.json8
-rw-r--r--META.yml8
-rw-r--r--lib/Parse/PMFile.pm4
-rw-r--r--t/41_multiple_packages.t52
-rw-r--r--t/42_class_versions.t61
-rw-r--r--t/43_role_versions.t61
8 files changed, 190 insertions, 10 deletions
diff --git a/Changes b/Changes
index 347f90e..15712db 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
Revision history for Parse-PMFile
+0.44 2023/04/27
+ - Allow to parse class|role NAME VERSION
+
0.43 2020/12/12
- Avoid instantiating `Safe` compartment if operating in "unsafe" mode.
(GH#12; bleargh45++)
diff --git a/MANIFEST b/MANIFEST
index b12566e..9140d01 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -14,6 +14,9 @@ t/34_math_version.t
t/35_scoped_our_version.t
t/36_long_version.t
t/40_package_versions.t
+t/41_multiple_packages.t
+t/42_class_versions.t
+t/43_role_versions.t
t/50_no_index.t
t/60_permissions.t
t/70_vpp.t
diff --git a/META.json b/META.json
index dd8372d..55e4e22 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
"Kenichi Ishigaki <ishigaki@cpan.org>"
],
"dynamic_config" : 0,
- "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010",
+ "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
@@ -27,7 +27,7 @@
},
"configure" : {
"requires" : {
- "ExtUtils::MakeMaker::CPANfile" : "0.08"
+ "ExtUtils::MakeMaker::CPANfile" : "0.09"
}
},
"runtime" : {
@@ -52,6 +52,6 @@
"url" : "https://github.com/charsbar/Parse-PMFile"
}
},
- "version" : "0.43",
- "x_serialization_backend" : "JSON::PP version 4.00"
+ "version" : "0.44",
+ "x_serialization_backend" : "JSON::PP version 4.12"
}
diff --git a/META.yml b/META.yml
index fbf93ee..42d81f0 100644
--- a/META.yml
+++ b/META.yml
@@ -7,9 +7,9 @@ build_requires:
File::Temp: '0.19'
Test::More: '0.88'
configure_requires:
- ExtUtils::MakeMaker::CPANfile: '0.08'
+ ExtUtils::MakeMaker::CPANfile: '0.09'
dynamic_config: 0
-generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,5 +27,5 @@ requires:
version: '0.83'
resources:
repository: https://github.com/charsbar/Parse-PMFile
-version: '0.43'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.012'
+version: '0.44'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/lib/Parse/PMFile.pm b/lib/Parse/PMFile.pm
index cb4cb58..11736d7 100644
--- a/lib/Parse/PMFile.pm
+++ b/lib/Parse/PMFile.pm
@@ -10,7 +10,7 @@ use Dumpvalue;
use version ();
use File::Spec ();
-our $VERSION = '0.43';
+our $VERSION = '0.44';
our $VERBOSE = 0;
our $ALLOW_DEV_VERSION = 0;
our $FORK = 0;
@@ -382,7 +382,7 @@ sub _packages_per_pmfile {
# (.*) # takes too much time if $pline is long
#(?<![*\$\\@%&]) # no sigils
^[\s\{;]*
- \bpackage\s+
+ \b(?:package|class|role)\s+
([\w\:\']+)
\s*
(?: $ | [\}\;] | \{ | \s+($version::STRICT) )
diff --git a/t/41_multiple_packages.t b/t/41_multiple_packages.t
new file mode 100644
index 0000000..6cb7ec0
--- /dev/null
+++ b/t/41_multiple_packages.t
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+use Test::More;
+use Parse::PMFile;
+use File::Temp;
+
+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};
+ }
+}
diff --git a/t/42_class_versions.t b/t/42_class_versions.t
new file mode 100644
index 0000000..22dee87
--- /dev/null
+++ b/t/42_class_versions.t
@@ -0,0 +1,61 @@
+use strict;
+use warnings;
+use Test::More;
+use Parse::PMFile;
+use File::Temp;
+
+my $tmpdir = File::Temp->newdir(CLEANUP => 1);
+plan skip_all => "tmpdir is not ready" unless -e $tmpdir && -w $tmpdir;
+
+test('class '.'Parse::PMFile::Test', <<'TEST');
+{
+ $Parse::PMFile::Test::VERSION = "0.01";
+}
+TEST
+
+test('class '.'Parse::PMFile::Test', <<'TEST');
+{
+ $VERSION = "0.01";
+}
+TEST
+
+test('class '.'Parse::PMFile::Test {', <<'TEST');
+ $Parse::PMFile::Test::VERSION = "0.01";
+};
+TEST
+
+test('class '.'Parse::PMFile::Test {', <<'TEST');
+ $VERSION = "0.01";
+};
+TEST
+
+test('class '.'Parse::PMFile::Test 0.01 {', <<'TEST');
+};
+TEST
+
+test('class '.'Parse::PMFile::Test 0.01 :isa(Foo) :does(Bar) {', <<'TEST');
+};
+TEST
+
+sub test {
+ my @lines = @_;
+
+ my $pmfile = "$tmpdir/Test.pm";
+
+ open my $fh, '>', $pmfile or plan skip_all => "Failed to create a pmfile";
+ print $fh join "\n", @lines, "";
+ close $fh;
+
+ for (0..1) {
+ no warnings 'once';
+ local $Parse::PMFile::FORK = $_;
+ my $parser = Parse::PMFile->new;
+ my $info = $parser->parse($pmfile);
+
+ is $info->{'Parse::PMFile::Test'}{version} => '0.01';
+ # note explain $info;
+ }
+}
+
+done_testing;
+
diff --git a/t/43_role_versions.t b/t/43_role_versions.t
new file mode 100644
index 0000000..6149992
--- /dev/null
+++ b/t/43_role_versions.t
@@ -0,0 +1,61 @@
+use strict;
+use warnings;
+use Test::More;
+use Parse::PMFile;
+use File::Temp;
+
+my $tmpdir = File::Temp->newdir(CLEANUP => 1);
+plan skip_all => "tmpdir is not ready" unless -e $tmpdir && -w $tmpdir;
+
+test('role '.'Parse::PMFile::Test', <<'TEST');
+{
+ $Parse::PMFile::Test::VERSION = "0.01";
+}
+TEST
+
+test('role '.'Parse::PMFile::Test', <<'TEST');
+{
+ $VERSION = "0.01";
+}
+TEST
+
+test('role '.'Parse::PMFile::Test {', <<'TEST');
+ $Parse::PMFile::Test::VERSION = "0.01";
+};
+TEST
+
+test('role '.'Parse::PMFile::Test {', <<'TEST');
+ $VERSION = "0.01";
+};
+TEST
+
+test('role '.'Parse::PMFile::Test 0.01 {', <<'TEST');
+};
+TEST
+
+test('role '.'Parse::PMFile::Test 0.01 :does(Bar) {', <<'TEST');
+};
+TEST
+
+sub test {
+ my @lines = @_;
+
+ my $pmfile = "$tmpdir/Test.pm";
+
+ open my $fh, '>', $pmfile or plan skip_all => "Failed to create a pmfile";
+ print $fh join "\n", @lines, "";
+ close $fh;
+
+ for (0..1) {
+ no warnings 'once';
+ local $Parse::PMFile::FORK = $_;
+ my $parser = Parse::PMFile->new;
+ my $info = $parser->parse($pmfile);
+
+ is $info->{'Parse::PMFile::Test'}{version} => '0.01';
+ # note explain $info;
+ }
+}
+
+done_testing;
+