|
Packit |
6539e1 |
use strict;
|
|
Packit |
6539e1 |
use warnings;
|
|
Packit |
6539e1 |
# vim:ts=8:sw=2:et:sta:sts=2
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
use Test::More 0.82;
|
|
Packit |
6539e1 |
use Module::Metadata;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
use lib 't/lib';
|
|
Packit |
6539e1 |
use GeneratePackage;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $undef;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# parse various module $VERSION lines
|
|
Packit |
6539e1 |
# format: {
|
|
Packit |
6539e1 |
# name => test name
|
|
Packit |
6539e1 |
# code => code snippet (string)
|
|
Packit |
6539e1 |
# vers => expected version object (in stringified form),
|
|
Packit |
6539e1 |
# }
|
|
Packit |
6539e1 |
my @modules = (
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => {},
|
|
Packit |
6539e1 |
name => 'no $VERSION line',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => {},
|
|
Packit |
6539e1 |
name => 'undefined $VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
name => 'declared & defined on same line with "our"',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
name => 'declared & defined on separate lines with "our"',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'commented & defined on same line',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = '1.23'; # our $VERSION = '4.56';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'commented & defined on separate lines',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
# our $VERSION = '4.56';
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers =>'1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'use vars',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
use vars qw( $VERSION );
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'choose the right default package based on package/file name',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple::_private;
|
|
Packit |
6539e1 |
$VERSION = '0';
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23'; # this should be chosen for version
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { 'Simple' => '1.23', 'Simple::_private' => '0' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'just read the first $VERSION line',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23'; # we should see this line
|
|
Packit |
6539e1 |
$VERSION = eval $VERSION; # and ignore this one
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'just read the first $VERSION line in reopened package (1)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
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 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { 'Error::Simple' => '2.34', Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'just read the first $VERSION line in reopened package (2)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
package Error::Simple;
|
|
Packit |
6539e1 |
$VERSION = '2.34';
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { 'Error::Simple' => '2.34', Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'mentions another module\'s $VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
if ( $Other::VERSION ) {
|
|
Packit |
6539e1 |
# whatever
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'mentions another module\'s $VERSION in a different package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
package Simple2;
|
|
Packit |
6539e1 |
if ( $Simple::VERSION ) {
|
|
Packit |
6539e1 |
# whatever
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION checked only in assignments, not regexp ops',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
if ( $VERSION =~ /1\.23/ ) {
|
|
Packit |
6539e1 |
# whatever
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION checked only in assignments, not relational ops (1)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
if ( $VERSION == 3.45 ) {
|
|
Packit |
6539e1 |
# whatever
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION checked only in assignments, not relational ops (2)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
package Simple2;
|
|
Packit |
6539e1 |
if ( $Simple::VERSION == 3.45 ) {
|
|
Packit |
6539e1 |
# whatever
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Fully qualified $VERSION declared in package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$Simple::VERSION = 1.23;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Differentiate fully qualified $VERSION in a package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$Simple2::VERSION = '999';
|
|
Packit |
6539e1 |
$Simple::VERSION = 1.23;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23', Simple2 => '999' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Differentiate fully qualified $VERSION and unqualified',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$Simple2::VERSION = '999';
|
|
Packit |
6539e1 |
$VERSION = 1.23;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23', Simple2 => '999' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Differentiate fully qualified $VERSION and unqualified, other order',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = 1.23;
|
|
Packit |
6539e1 |
$Simple2::VERSION = '999';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23', Simple2 => '999' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION declared as package variable from within "main" package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
$Simple::VERSION = '1.23';
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$x = $y, $cats = $dogs;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION wrapped in parens - space inside',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
( $VERSION ) = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
'1.23' => <<'---', # $VERSION wrapped in parens - no space inside
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
($VERSION) = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION follows a spurious "package" in a quoted construct',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
__PACKAGE__->mk_accessors(qw(
|
|
Packit |
6539e1 |
program socket proc
|
|
Packit |
6539e1 |
package filename line codeline subroutine finished));
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
our $VERSION = "1.23";
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION using version.pm',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
use version; our $VERSION = version->new('1.23');
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION using version.pm and qv()',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
use version; our $VERSION = qv('1.230');
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => 'v1.230',
|
|
Packit |
6539e1 |
all_versions => { Simple => 'v1.230' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'underscore version with an eval',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = '1.23_01';
|
|
Packit |
6539e1 |
$VERSION = eval $VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23_01',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23_01' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Two version assignments, no package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
$Simple::VERSION = '1.230';
|
|
Packit |
6539e1 |
$Simple::VERSION = eval $Simple::VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.230' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'Two version assignments, should ignore second one',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$Simple::VERSION = '1.230';
|
|
Packit |
6539e1 |
$Simple::VERSION = eval $Simple::VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.230',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.230' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'declared & defined on same line with "our"',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = '1.23_00_00';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.230000',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.230000' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple 1.23;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple 1.23_01;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23_01',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23_01' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple v1.2.3;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => 'v1.2.3',
|
|
Packit |
6539e1 |
all_versions => { Simple => 'v1.2.3' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple v1.2_3;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => 'v1.2_3',
|
|
Packit |
6539e1 |
all_versions => { Simple => 'v1.2_3' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'trailing crud',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
$VERSION = '1.23-alpha';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'trailing crud',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
$VERSION = '1.23b';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'multi_underscore',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
$VERSION = '1.2_3_4';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.234',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.234' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'non-numeric',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
$VERSION = 'onetwothree';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '0',
|
|
Packit |
6539e1 |
all_versions => { Simple => '0' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME BLOCK, undef $VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple {
|
|
Packit |
6539e1 |
our $VERSION;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => {},
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME BLOCK, with $VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple {
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION BLOCK (1)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple 1.23 {
|
|
Packit |
6539e1 |
1;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package NAME VERSION BLOCK (2)',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple v1.2.3_4 {
|
|
Packit |
6539e1 |
1;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => 'v1.2.3_4',
|
|
Packit |
6539e1 |
all_versions => { Simple => 'v1.2.3_4' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'set from separately-initialised variable, two lines',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $CVSVERSION = '$Revision: 1.7 $';
|
|
Packit |
6539e1 |
our ($VERSION) = ($CVSVERSION =~ /(\d+\.\d+)/);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '0',
|
|
Packit |
6539e1 |
all_versions => { Simple => '0' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'our + bare v-string',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = v2.2.102.2;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => 'v2.2.102.2',
|
|
Packit |
6539e1 |
all_versions => { Simple => 'v2.2.102.2' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'our + dev release',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = "0.0.9_1";
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '0.0.9_1',
|
|
Packit |
6539e1 |
all_versions => { Simple => '0.0.9_1' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'our + crazy string and substitution code',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
our $VERSION = '1.12.B55J2qn'; our $WTF = $VERSION; $WTF =~ s/^\d+\.\d+\.//; # attempts to rationalize $WTF go here.
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.12',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.12' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'our in braces, as in Dist::Zilla::Plugin::PkgVersion with use_our = 1',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
{ our $VERSION = '1.12'; }
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.12',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.12' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'calculated version - from Acme-Pi-3.14',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
my $version = atan2(1,1) * 4; $Simple::VERSION = "$version";
|
|
Packit |
6539e1 |
1;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => sub { defined $_[0] and $_[0] =~ /^3\.14159/ },
|
|
Packit |
6539e1 |
all_versions => sub { ref $_[0] eq 'HASH'
|
|
Packit |
6539e1 |
and keys %{$_[0]} == 1
|
|
Packit |
6539e1 |
and (keys%{$_[0]})[0] eq 'Simple'
|
|
Packit |
6539e1 |
and (values %{$_[0]})[0] =~ /^3\.14159/
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'set from separately-initialised variable, one line',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
my $CVSVERSION = '$Revision: 1.7 $'; our ($VERSION) = ($CVSVERSION =~ /(\d+\.\d+)/);
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.7',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.7' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'from Lingua-StopWords-0.09/devel/gen_modules.plx',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Foo;
|
|
Packit |
6539e1 |
our $VERSION = $Bar::VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => { Foo => '0' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'from XML-XSH2-2.1.17/lib/XML/XSH2/Parser.pm',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
our $VERSION = # Hide from PAUSE
|
|
Packit |
6539e1 |
'1.967009';
|
|
Packit |
6539e1 |
$VERSION = eval $VERSION;
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => { main => '0' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'from MBARBON/Module-Info-0.30.tar.gz',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$VERSION = eval 'use version; 1' ? 'version'->new('0.30') : '0.30';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '0.30',
|
|
Packit |
6539e1 |
all_versions => { Simple => '0.30' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => '$VERSION inside BEGIN block',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
BEGIN { $VERSION = '1.23' }
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
TODO_scalar => 'apply fix from ExtUtils-MakeMaker PR#135',
|
|
Packit |
6539e1 |
TODO_all_versions => 'apply fix from ExtUtils-MakeMaker PR#135',
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'our $VERSION inside BEGIN block',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
'1.23' => <<'---', # our + BEGIN
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
BEGIN { our $VERSION = '1.23' }
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => '1.23',
|
|
Packit |
6539e1 |
all_versions => { Simple => '1.23' },
|
|
Packit |
6539e1 |
TODO_scalar => 'apply fix from ExtUtils-MakeMaker PR#135',
|
|
Packit |
6539e1 |
TODO_all_versions => 'apply fix from ExtUtils-MakeMaker PR#135',
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'no assumption of primary version merely if a package\'s $VERSION is referenced',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package Simple;
|
|
Packit |
6539e1 |
$Foo::Bar::VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => undef,
|
|
Packit |
6539e1 |
all_versions => { 'Foo::Bar' => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'no package statement; bare $VERSION',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
$VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => undef,
|
|
Packit |
6539e1 |
all_versions => { '____caller' => '1.23' },
|
|
Packit |
6539e1 |
TODO_all_versions => 'FIXME! RT#74741',
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'no package statement; bare $VERSION with our',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => undef,
|
|
Packit |
6539e1 |
all_versions => { '____caller' => '1.23' },
|
|
Packit |
6539e1 |
TODO_all_versions => 'FIXME! RT#74741',
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'no package statement; fully-qualified $VERSION for main',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
$::VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => undef,
|
|
Packit |
6539e1 |
all_versions => { 'main' => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'no package statement; fully-qualified $VERSION for other package',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
$Foo::Bar::VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => undef,
|
|
Packit |
6539e1 |
all_versions => { 'Foo::Bar' => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
name => 'package statement that does not quite match the filename',
|
|
Packit |
6539e1 |
filename => 'Simple.pm',
|
|
Packit |
6539e1 |
code => <<'---',
|
|
Packit |
6539e1 |
package ThisIsNotSimple;
|
|
Packit |
6539e1 |
our $VERSION = '1.23';
|
|
Packit |
6539e1 |
---
|
|
Packit |
6539e1 |
vers => $undef,
|
|
Packit |
6539e1 |
all_versions => { 'ThisIsNotSimple' => '1.23' },
|
|
Packit |
6539e1 |
},
|
|
Packit |
6539e1 |
);
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $test_num = 0;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $tmpdir = GeneratePackage::tmpdir();
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# iterate through @modules
|
|
Packit |
6539e1 |
foreach my $test_case (@modules) {
|
|
Packit |
6539e1 |
note '-------';
|
|
Packit |
6539e1 |
note $test_case->{name};
|
|
Packit |
6539e1 |
my $code = $test_case->{code};
|
|
Packit |
6539e1 |
my $expected_version = $test_case->{vers};
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
SKIP: {
|
|
Packit |
6539e1 |
skip( "No our() support until perl 5.6", (defined $expected_version ? 3 : 2) )
|
|
Packit |
6539e1 |
if "$]" < 5.006 && $code =~ /\bour\b/;
|
|
Packit |
6539e1 |
skip( "No package NAME VERSION support until perl 5.11.1", (defined $expected_version ? 3 : 2) )
|
|
Packit |
6539e1 |
if "$]" < 5.011001 && $code =~ /package\s+[\w\:\']+\s+v?[0-9._]+/;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $warnings = '';
|
|
Packit |
6539e1 |
local $SIG{__WARN__} = sub { $warnings .= $_ for @_ };
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $pm_info = Module::Metadata->new_from_file(generate_file(File::Spec->catfile($tmpdir, "Simple${test_num}"), 'Simple.pm', $code));
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# whenever we drop support for 5.6, we can do this:
|
|
Packit |
6539e1 |
# open my $fh, '<', \(encode('UTF-8', $code, Encode::FB_CROAK))
|
|
Packit |
6539e1 |
# or die "cannot open handle to code string: $!";
|
|
Packit |
6539e1 |
# my $pm_info = Module::Metadata->new_from_handle($fh, 'lib/Simple.pm');
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
my $errs;
|
|
Packit |
6539e1 |
my $got = $pm_info->version;
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
# note that in Test::More 0.94 and earlier, is() stringifies first before comparing;
|
|
Packit |
6539e1 |
# from 0.95_01 and later, it just lets the objects figure out how to handle 'eq'
|
|
Packit |
6539e1 |
# We want to ensure we preserve the original, as long as it's legal, so we
|
|
Packit |
6539e1 |
# explicitly check the stringified form.
|
|
Packit |
6539e1 |
{
|
|
Packit |
6539e1 |
local $TODO = !defined($got) && ($test_case->{TODO_code_sub} || $test_case->{TODO_scalar});
|
|
Packit |
6539e1 |
isa_ok($got, 'version') or $errs++ if defined $expected_version;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
if (ref($expected_version) eq 'CODE') {
|
|
Packit |
6539e1 |
local $TODO = $test_case->{TODO_code_sub};
|
|
Packit |
6539e1 |
ok(
|
|
Packit |
6539e1 |
$expected_version->($got),
|
|
Packit |
6539e1 |
"case '$test_case->{name}': module version passes match sub"
|
|
Packit |
6539e1 |
)
|
|
Packit |
6539e1 |
or $errs++;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
else {
|
|
Packit |
6539e1 |
local $TODO = $test_case->{TODO_scalar};
|
|
Packit |
6539e1 |
is(
|
|
Packit |
6539e1 |
(defined $got ? "$got" : $got),
|
|
Packit |
6539e1 |
$expected_version,
|
|
Packit |
6539e1 |
"case '$test_case->{name}': correct module version ("
|
|
Packit |
6539e1 |
. (defined $expected_version? "'$expected_version'" : 'undef')
|
|
Packit |
6539e1 |
. ')'
|
|
Packit |
6539e1 |
)
|
|
Packit |
6539e1 |
or $errs++;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
if (exists $test_case->{all_versions}) {
|
|
Packit |
6539e1 |
local $TODO = $test_case->{TODO_all_versions};
|
|
Packit |
6539e1 |
if (ref($expected_version) eq 'CODE') {
|
|
Packit |
6539e1 |
ok(
|
|
Packit |
6539e1 |
$test_case->{all_versions}->($pm_info->{versions}),
|
|
Packit |
6539e1 |
"case '$test_case->{name}': all extracted versions passes match sub"
|
|
Packit |
6539e1 |
) or $errs++;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
else {
|
|
Packit |
6539e1 |
is_deeply(
|
|
Packit |
6539e1 |
$pm_info->{versions},
|
|
Packit |
6539e1 |
$test_case->{all_versions},
|
|
Packit |
6539e1 |
'correctly found all $VERSIONs',
|
|
Packit |
6539e1 |
) or $errs++;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
is( $warnings, '', "case '$test_case->{name}': no warnings from parsing" ) or $errs++;
|
|
Packit |
6539e1 |
diag 'parsed module: ', explain($pm_info) if !$ENV{PERL_CORE} && $errs;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
continue {
|
|
Packit |
6539e1 |
++$test_num;
|
|
Packit |
6539e1 |
}
|
|
Packit |
6539e1 |
|
|
Packit |
6539e1 |
done_testing;
|