use strict;
use Test::More;
BEGIN
{
if ($] < 5.009_005) {
plan(skip_all => "This test is only applicable for perl >= 5.9.5");
} elsif ( ! eval { require MRO::Compat } || $@) {
plan(skip_all => "MRO::Compat not available");
} elsif ( ! eval { require Class::C3 } || $@) {
plan(skip_all => "Class::C3 not available");
} else {
plan(tests => 2);
}
}
{
# If the bug still exists, I should get a few warnings
my @warnings;
local $SIG{__WARN__} = sub {
push @warnings, $_[0];
};
# Remove symbols from respective tables, and
# remove from INC, so we force re-evaluation
foreach my $class (qw(Class::C3 MRO::Compat)) {
my $file = $class;
$file =~ s/::/\//g;
$file .= '.pm';
delete $INC{$file};
{ # Don't do this at home, kids!
no strict 'refs';
foreach my $key (keys %{ "${class}::" }) {
delete ${"${class}::"}{$key};
}
}
}
eval {
require MRO::Compat;
require Class::C3;
};
ok( ! $@, "Class::C3 loaded ok");
if (! ok( ! @warnings, "loading Class::C3 did not generate warnings" )) {
diag("Generated warnings are (expecting 'subroutine redefined...')");
diag(" $_") for @warnings;
}
}