#!/usr/bin/perl -w use strict; use Test::More tests => 11; use_ok('base'); package No::Version; use vars qw($Foo); sub VERSION { 42 } package Test::Version; use base qw(No::Version); ::ok( ! defined $No::Version::VERSION, '$VERSION bug' ); # Test Inverse of $VERSION bug base.pm should not clobber existing $VERSION package Has::Version; BEGIN { $Has::Version::VERSION = '42' }; package Test::Version2; use base qw(Has::Version); ::is( $Has::Version::VERSION, 42 ); package main; my $eval1 = q{ { package Eval1; { package Eval2; use base 'Eval1'; $Eval2::VERSION = "1.02"; } $Eval1::VERSION = "1.01"; } }; eval $eval1; is( $@, '' ); is( $Eval1::VERSION, 1.01 ); is( $Eval2::VERSION, 1.02 ); eval q{use base 'reallyReAlLyNotexists'}; like( $@, qr/^Base class package "reallyReAlLyNotexists" is empty\./, 'base with empty package'); eval q{use base 'reallyReAlLyNotexists'}; like( $@, qr/^Base class package "reallyReAlLyNotexists" is empty\./, ' still empty on 2nd load'); { my $warning; local $SIG{__WARN__} = sub { $warning = shift }; eval q{package HomoGenous; use base 'HomoGenous';}; like($warning, qr/^Class 'HomoGenous' tried to inherit from itself/, ' self-inheriting'); } { BEGIN { $Has::Version_0::VERSION = 0 } package Test::Version3; use base qw(Has::Version_0); ::is( $Has::Version_0::VERSION, 0, '$VERSION==0 preserved' ); } { package Schlozhauer; use constant FIELDS => 6; package Basilisco; eval q{ use base 'Schlozhauer' }; ::is( $@, '', 'Can coexist with a FIELDS constant' ); }