1#!/usr/bin/perl -w 2 3BEGIN { 4 if( $ENV{PERL_CORE} ) { 5 chdir 't' if -d 't'; 6 chdir '../lib/parent'; 7 @INC = '..'; 8 } 9} 10 11use strict; 12use Test::More tests => 10; 13 14use_ok('parent'); 15 16 17package No::Version; 18 19use vars qw($Foo); 20sub VERSION { 42 } 21 22package Test::Version; 23 24use parent -norequire, 'No::Version'; 25::is( $No::Version::VERSION, undef, '$VERSION gets left alone' ); 26 27# Test Inverse: parent.pm should not clobber existing $VERSION 28package Has::Version; 29 30BEGIN { $Has::Version::VERSION = '42' }; 31 32package Test::Version2; 33 34use parent -norequire, 'Has::Version'; 35::is( $Has::Version::VERSION, 42 ); 36 37package main; 38 39my $eval1 = q{ 40 { 41 package Eval1; 42 { 43 package Eval2; 44 use parent -norequire, 'Eval1'; 45 $Eval2::VERSION = "1.02"; 46 } 47 $Eval1::VERSION = "1.01"; 48 } 49}; 50 51eval $eval1; 52is( $@, '' ); 53 54# String comparisons, just to be safe from floating-point errors 55is( $Eval1::VERSION, '1.01' ); 56 57is( $Eval2::VERSION, '1.02' ); 58 59 60eval q{use parent 'reallyReAlLyNotexists'}; 61like( $@, q{/^Can't locate reallyReAlLyNotexists.pm in \@INC \(\@INC contains:/}, 'baseclass that does not exist'); 62 63eval q{use parent 'reallyReAlLyNotexists'}; 64like( $@, q{/^Can't locate reallyReAlLyNotexists.pm in \@INC \(\@INC contains:/}, ' still failing on 2nd load'); 65{ 66 my $warning; 67 local $SIG{__WARN__} = sub { $warning = shift }; 68 eval q{package HomoGenous; use parent 'HomoGenous';}; 69 like($warning, q{/^Class 'HomoGenous' tried to inherit from itself/}, 70 ' self-inheriting'); 71} 72 73{ 74 BEGIN { $Has::Version_0::VERSION = 0 } 75 76 package Test::Version3; 77 78 use parent -norequire, 'Has::Version_0'; 79 ::is( $Has::Version_0::VERSION, 0, '$VERSION==0 preserved' ); 80} 81 82