xref: /openbsd-src/gnu/usr.bin/perl/cpan/version/t/02derived.t (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
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