a test that checks no warnings are generated when MRO::Compat is loaded before Class::C3
Daisuke Maki [Mon, 9 Jun 2008 08:34:33 +0000 (08:34 +0000)]
t/37_mro_warn.t [new file with mode: 0644]

diff --git a/t/37_mro_warn.t b/t/37_mro_warn.t
new file mode 100644 (file)
index 0000000..f6a8966
--- /dev/null
@@ -0,0 +1,50 @@
+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;
+    }
+}