lib/base/t/base.t See if base works
lib/base/t/fields-base.t See if fields work
lib/base/t/fields.t See if fields work
+lib/base/t/isa.t See if base's behaviour doesn't change
lib/base/t/sigdie.t See if base works with SIGDIE
lib/base/t/version.t See if base works with versions
lib/base/t/warnings.t See if base works with warnings
my $inheritor = caller(0);
my @isa_classes;
+ my @bases;
foreach my $base (@_) {
if ( $inheritor eq $base ) {
warn "Class '$inheritor' tried to inherit from itself\n";
}
- next if $inheritor->isa($base);
+ next if grep $_->isa($base), ($inheritor, @bases);
if (has_version($base)) {
${$base.'::VERSION'} = '-1, set by base.pm'
${$base.'::VERSION'} = "-1, set by base.pm"
unless defined ${$base.'::VERSION'};
}
- push @isa_classes, $base;
+ push @bases, $base;
if ( has_fields($base) || has_attr($base) ) {
# No multiple fields inheritance *suck*
# Save this until the end so it's all or nothing if the above loop croaks.
push @{"$inheritor\::ISA"}, @isa_classes;
+ push @{"$inheritor\::ISA"}, @bases;
+
if( defined $fields_base ) {
inherit_fields($inheritor, $fields_base);
}
--- /dev/null
+#!/usr/bin/perl -w
+
+# Regression test some quirky behavior of base.pm.
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = qw(../lib);
+ }
+}
+
+use strict;
+use Test::More tests => 1;
+
+{
+ package Parent;
+
+ sub foo { 42 }
+
+ package Middle;
+
+ use base qw(Parent);
+
+ package Child;
+
+ base->import(qw(Middle Parent));
+}
+
+is_deeply [@Child::ISA], [qw(Middle)],
+ 'base.pm will not add to @ISA if you already are-a';
\ No newline at end of file