File: 37_mro_warn.t

package info (click to toggle)
libclass-c3-perl 0.35-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 260 kB
  • sloc: perl: 476; makefile: 8
file content (51 lines) | stat: -rw-r--r-- 1,341 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use strict;
use warnings;
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;
    }
}