diff options
author | gregor herrmann <gregoa@debian.org> | 2023-06-27 17:37:40 +0200 |
---|---|---|
committer | gregor herrmann <gregoa@debian.org> | 2023-06-27 17:37:40 +0200 |
commit | 01cdb968b25829f045a425d7316ad5cac163ed4e (patch) | |
tree | 20f4ac4925520d67653cbc4a14c4e29cb18ad1a4 | |
parent | 02e150bf74e1eafb427a108ac0b1c9e70b0ccc1f (diff) | |
parent | ea52a5625df48545e1899a15474202c54aef59a7 (diff) |
New upstream version 0.44
-rw-r--r-- | Changes | 3 | ||||
-rw-r--r-- | MANIFEST | 3 | ||||
-rw-r--r-- | META.json | 8 | ||||
-rw-r--r-- | META.yml | 8 | ||||
-rw-r--r-- | lib/Parse/PMFile.pm | 4 | ||||
-rw-r--r-- | t/41_multiple_packages.t | 52 | ||||
-rw-r--r-- | t/42_class_versions.t | 61 | ||||
-rw-r--r-- | t/43_role_versions.t | 61 |
8 files changed, 190 insertions, 10 deletions
@@ -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++) @@ -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 @@ -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" } @@ -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; + |