16fb12b70Safresh1#! /usr/local/perl -w 26fb12b70Safresh1# Before `make install' is performed this script should be runnable with 36fb12b70Safresh1# `make test'. After `make install' it should work as `perl test.pl' 46fb12b70Safresh1 56fb12b70Safresh1######################### 66fb12b70Safresh1 76fb12b70Safresh1use Test::More qw/no_plan/; 8b8851fccSafresh1use File::Spec; 96fb12b70Safresh1use File::Temp qw/tempfile/; 106fb12b70Safresh1 116fb12b70Safresh1BEGIN { 129f11ffb7Safresh1 my $coretests = File::Spec->rel2abs( 139f11ffb7Safresh1 File::Spec->catpath( 14b8851fccSafresh1 (File::Spec->splitpath($0))[0,1], 'coretests.pm' 159f11ffb7Safresh1 ) 16b8851fccSafresh1 ); 176fb12b70Safresh1 require $coretests; 18*3d61058aSafresh1 use_ok("version", 0.9930); 196fb12b70Safresh1 # If we made it this far, we are ok. 206fb12b70Safresh1} 216fb12b70Safresh1 226fb12b70Safresh1use lib qw/./; 236fb12b70Safresh1 246fb12b70Safresh1package version::Bad; 25eac174f2Safresh1use base 'version'; 266fb12b70Safresh1sub new { my($self,$n)=@_; bless \$n, $self } 276fb12b70Safresh1 286fb12b70Safresh1# Bad subclass for SemVer failures seen with pure Perl version.pm only 296fb12b70Safresh1package version::Bad2; 30eac174f2Safresh1use base 'version'; 316fb12b70Safresh1sub new { 326fb12b70Safresh1 my ($class, $val) = @_; 336fb12b70Safresh1 die 'Invalid version string format' unless version::is_strict($val); 346fb12b70Safresh1 my $self = $class->SUPER::new($val); 356fb12b70Safresh1 return $self; 366fb12b70Safresh1} 376fb12b70Safresh1sub declare { 386fb12b70Safresh1 my ($class, $val) = @_; 396fb12b70Safresh1 my $self = $class->SUPER::declare($val); 406fb12b70Safresh1 return $self; 416fb12b70Safresh1} 426fb12b70Safresh1 436fb12b70Safresh1package main; 446fb12b70Safresh1 456fb12b70Safresh1my $warning; 466fb12b70Safresh1local $SIG{__WARN__} = sub { $warning = $_[0] }; 476fb12b70Safresh1# dummy up a legal module for testing RT#19017 486fb12b70Safresh1my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1); 496fb12b70Safresh1(my $package = basename($filename)) =~ s/\.pm$//; 506fb12b70Safresh1print $fh <<"EOF"; 516fb12b70Safresh1# This is an empty subclass 526fb12b70Safresh1package $package; 53eac174f2Safresh1use base 'version'; 549f11ffb7Safresh1our \$VERSION = 0.001; 556fb12b70Safresh1EOF 566fb12b70Safresh1close $fh; 576fb12b70Safresh1 586fb12b70Safresh1sub main_reset { 596fb12b70Safresh1 delete $main::INC{'$package'}; 606fb12b70Safresh1 undef &qv; undef *::qv; # avoid 'used once' warning 616fb12b70Safresh1 undef &declare; undef *::declare; # avoid 'used once' warning 626fb12b70Safresh1} 636fb12b70Safresh1 646fb12b70Safresh1use_ok($package, 0.001); 656fb12b70Safresh1my $testobj = $package->new(1.002_003); 666fb12b70Safresh1isa_ok( $testobj, $package ); 676fb12b70Safresh1ok( $testobj->numify == 1.002003, "Numified correctly" ); 686fb12b70Safresh1ok( $testobj->stringify eq "1.002003", "Stringified correctly" ); 696fb12b70Safresh1ok( $testobj->normal eq "v1.2.3", "Normalified correctly" ); 706fb12b70Safresh1 716fb12b70Safresh1my $verobj = version::->new("1.2.4"); 726fb12b70Safresh1ok( $verobj > $testobj, "Comparison vs parent class" ); 736fb12b70Safresh1 746fb12b70Safresh1BaseTests($package, "new", "qv"); 756fb12b70Safresh1main_reset; 766fb12b70Safresh1use_ok($package, 0.001, "declare"); 776fb12b70Safresh1BaseTests($package, "new", "declare"); 786fb12b70Safresh1main_reset; 796fb12b70Safresh1use_ok($package, 0.001); 806fb12b70Safresh1BaseTests($package, "parse", "qv"); 816fb12b70Safresh1main_reset; 826fb12b70Safresh1use_ok($package, 0.001, "declare"); 836fb12b70Safresh1BaseTests($package, "parse", "declare"); 846fb12b70Safresh1 856fb12b70Safresh1$testobj = version::Bad->new(1.002_003); 866fb12b70Safresh1isa_ok( $testobj, "version::Bad" ); 876fb12b70Safresh1eval { my $string = $testobj->numify }; 886fb12b70Safresh1like($@, qr/Invalid version object/, 896fb12b70Safresh1 "Bad subclass numify"); 906fb12b70Safresh1eval { my $string = $testobj->normal }; 916fb12b70Safresh1like($@, qr/Invalid version object/, 926fb12b70Safresh1 "Bad subclass normal"); 936fb12b70Safresh1eval { my $string = $testobj->stringify }; 946fb12b70Safresh1like($@, qr/Invalid version object/, 956fb12b70Safresh1 "Bad subclass stringify"); 966fb12b70Safresh1eval { my $test = ($testobj > 1.0) }; 976fb12b70Safresh1like($@, qr/Invalid version object/, 986fb12b70Safresh1 "Bad subclass vcmp"); 996fb12b70Safresh1 1006fb12b70Safresh1# Bad subclassing for SemVer with pure Perl version.pm only 1016fb12b70Safresh1eval { my $test = version::Bad2->new("01.1.2") }; 1026fb12b70Safresh1like($@, qr/Invalid version string format/, 1036fb12b70Safresh1 "Correctly found invalid version"); 1046fb12b70Safresh1 1056fb12b70Safresh1eval { my $test = version::Bad2->declare("01.1.2") }; 1066fb12b70Safresh1unlike($@, qr/Invalid version string format/, 1076fb12b70Safresh1 "Correctly ignored invalid version"); 108