1b39c5158Smillert#!/usr/bin/perl -w 2b39c5158Smillert 3b39c5158Smillertuse strict; 46fb12b70Safresh1use Test::More tests => 15; 5b39c5158Smillert 6b39c5158Smillertuse_ok('base'); 7b39c5158Smillert 8b39c5158Smillert 9b39c5158Smillertpackage No::Version; 10b39c5158Smillert 11*5759b3d2Safresh1our $Foo; 12b39c5158Smillertsub VERSION { 42 } 13b39c5158Smillert 14b39c5158Smillertpackage Test::Version; 15b39c5158Smillert 16b39c5158Smillertuse base qw(No::Version); 17898184e3Ssthen::ok( ! defined $No::Version::VERSION, '$VERSION bug' ); 18b39c5158Smillert 19b39c5158Smillert# Test Inverse of $VERSION bug base.pm should not clobber existing $VERSION 20b39c5158Smillertpackage Has::Version; 21b39c5158Smillert 22b39c5158SmillertBEGIN { $Has::Version::VERSION = '42' }; 23b39c5158Smillert 24b39c5158Smillertpackage Test::Version2; 25b39c5158Smillert 26b39c5158Smillertuse base qw(Has::Version); 27b39c5158Smillert::is( $Has::Version::VERSION, 42 ); 28b39c5158Smillert 29b39c5158Smillertpackage main; 30b39c5158Smillert 31b39c5158Smillertmy $eval1 = q{ 32b39c5158Smillert { 33b39c5158Smillert package Eval1; 34b39c5158Smillert { 35b39c5158Smillert package Eval2; 36b39c5158Smillert use base 'Eval1'; 37b39c5158Smillert $Eval2::VERSION = "1.02"; 38b39c5158Smillert } 39b39c5158Smillert $Eval1::VERSION = "1.01"; 40b39c5158Smillert } 41b39c5158Smillert}; 42b39c5158Smillert 43b39c5158Smillerteval $eval1; 44b39c5158Smillertis( $@, '' ); 45b39c5158Smillert 46b39c5158Smillertis( $Eval1::VERSION, 1.01 ); 47b39c5158Smillert 48b39c5158Smillertis( $Eval2::VERSION, 1.02 ); 49b39c5158Smillert 50b39c5158Smillert 51b39c5158Smillerteval q{use base 'reallyReAlLyNotexists'}; 52b39c5158Smillertlike( $@, qr/^Base class package "reallyReAlLyNotexists" is empty\./, 53b39c5158Smillert 'base with empty package'); 54b39c5158Smillert 55b39c5158Smillerteval q{use base 'reallyReAlLyNotexists'}; 56b39c5158Smillertlike( $@, qr/^Base class package "reallyReAlLyNotexists" is empty\./, 57b39c5158Smillert ' still empty on 2nd load'); 58b39c5158Smillert{ 59b39c5158Smillert my $warning; 60b39c5158Smillert local $SIG{__WARN__} = sub { $warning = shift }; 61b39c5158Smillert eval q{package HomoGenous; use base 'HomoGenous';}; 62b39c5158Smillert like($warning, qr/^Class 'HomoGenous' tried to inherit from itself/, 63b39c5158Smillert ' self-inheriting'); 64b39c5158Smillert} 65b39c5158Smillert 66b39c5158Smillert{ 67b39c5158Smillert BEGIN { $Has::Version_0::VERSION = 0 } 68b39c5158Smillert 69b39c5158Smillert package Test::Version3; 70b39c5158Smillert 71b39c5158Smillert use base qw(Has::Version_0); 72b39c5158Smillert ::is( $Has::Version_0::VERSION, 0, '$VERSION==0 preserved' ); 73b39c5158Smillert} 74b39c5158Smillert 75b39c5158Smillert 76b39c5158Smillert{ 77b39c5158Smillert package Schlozhauer; 78b39c5158Smillert use constant FIELDS => 6; 79b39c5158Smillert 80b39c5158Smillert package Basilisco; 81b39c5158Smillert eval q{ use base 'Schlozhauer' }; 82b39c5158Smillert ::is( $@, '', 'Can coexist with a FIELDS constant' ); 83b39c5158Smillert} 846fb12b70Safresh1 856fb12b70Safresh1{ 866fb12b70Safresh1 use lib 't/lib'; 876fb12b70Safresh1 package UsingBroken; 886fb12b70Safresh1 eval q{use base 'Broken';}; 896fb12b70Safresh1 ::like( $@, qr/^Can't locate ThisModuleDoesNotExist\.pm/, 906fb12b70Safresh1 'base fails to compile by loading nonexistent module'); 916fb12b70Safresh1} 926fb12b70Safresh1 936fb12b70Safresh1SKIP: { 946fb12b70Safresh1 skip "unicode not supported on perl $]", 2 if $] < 5.008; 956fb12b70Safresh1 eval q{ 966fb12b70Safresh1 package UsingUnicode; 976fb12b70Safresh1 my $base = "M\N{U+00D8}dule"; 986fb12b70Safresh1 no strict 'refs'; 996fb12b70Safresh1 *{"${base}::foo"} = sub {}; 1006fb12b70Safresh1 eval q{use base $base;}; 1016fb12b70Safresh1 ::is( $@, '', 'nonexistent unicode module allowed'); 1026fb12b70Safresh1 }; 1036fb12b70Safresh1 1046fb12b70Safresh1 eval q{ 1056fb12b70Safresh1 package UsingUtf8; 1066fb12b70Safresh1 my $base = "M\N{U+00D8}dule"; 1076fb12b70Safresh1 utf8::encode($base); 1086fb12b70Safresh1 no strict 'refs'; 1096fb12b70Safresh1 *{"${base}::foo"} = sub {}; 1106fb12b70Safresh1 eval q{use base $base;}; 1116fb12b70Safresh1 ::is( $@, '', 'nonexistent utf8 module allowed'); 1126fb12b70Safresh1 }; 1136fb12b70Safresh1} 1146fb12b70Safresh1 1156fb12b70Safresh1{ 1166fb12b70Safresh1 package WithHostileINC; 1176fb12b70Safresh1 local @INC = (@INC, "a\nb"); 1186fb12b70Safresh1 my $base = "NonExistentModule"; 1196fb12b70Safresh1 no strict 'refs'; 1206fb12b70Safresh1 *{"${base}::foo"} = sub {}; 1216fb12b70Safresh1 eval q{use base $base;}; 1226fb12b70Safresh1 ::is( $@, '', 'nonexistent module allowed when @INC has hostile entries'); 1236fb12b70Safresh1} 124