#!/usr/bin/perl -w
BEGIN {
if( $ENV{PERL_CORE} ) {
chdir 't' if -d 't';
chdir '../lib/parent';
@INC = '..';
}
}
use strict;
use Test::More tests => 10;
use_ok('parent');
package No::Version;
use vars qw($Foo);
sub VERSION { 42 }
package Test::Version;
use parent -norequire, 'No::Version';
::is( $No::Version::VERSION, undef, '$VERSION gets left alone' );
# Test Inverse: parent.pm should not clobber existing $VERSION
package Has::Version;
BEGIN { $Has::Version::VERSION = '42' };
package Test::Version2;
use parent -norequire, 'Has::Version';
::is( $Has::Version::VERSION, 42 );
package main;
my $eval1 = q{
{
package Eval1;
{
package Eval2;
use parent -norequire, 'Eval1';
$Eval2::VERSION = "1.02";
}
$Eval1::VERSION = "1.01";
}
};
eval $eval1;
is( $@, '' );
# String comparisons, just to be safe from floating-point errors
is( $Eval1::VERSION, '1.01' );
is( $Eval2::VERSION, '1.02' );
eval q{use parent 'reallyReAlLyNotexists'};
like( $@, q{/^Can't locate reallyReAlLyNotexists.pm in \@INC \(\@INC contains:/}, 'baseclass that does not exist');
eval q{use parent 'reallyReAlLyNotexists'};
like( $@, q{/^Can't locate reallyReAlLyNotexists.pm in \@INC \(\@INC contains:/}, ' still failing on 2nd load');
{
my $warning;
local $SIG{__WARN__} = sub { $warning = shift };
eval q{package HomoGenous; use parent 'HomoGenous';};
like($warning, q{/^Class 'HomoGenous' tried to inherit from itself/},
' self-inheriting');
}
{
BEGIN { $Has::Version_0::VERSION = 0 }
package Test::Version3;
use parent -norequire, 'Has::Version_0';
::is( $Has::Version_0::VERSION, 0, '$VERSION==0 preserved' );
}