6 require q(./test.pl); plan(tests => 12);
10 This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
13 Level 5 8 | A | 9 | B | A | C | (More General)
25 Level 3 4 | G | 6 | E | |
30 Level 2 3 | H | 5 | F | |
38 Level 1 1 | J | 2 | I | |
43 Level 0 0 | K | (More Specialized)
53 package Test::A; use mro 'c3';
55 package Test::B; use mro 'c3';
57 package Test::C; use mro 'c3';
59 package Test::D; use mro 'c3';
60 use base qw/Test::A Test::B Test::C/;
62 package Test::E; use mro 'c3';
65 package Test::F; use mro 'c3';
67 sub testmeth { "wrong" }
69 package Test::G; use mro 'c3';
72 package Test::H; use mro 'c3';
75 package Test::I; use mro 'c3';
76 use base qw/Test::H Test::F/;
77 sub testmeth { "right" }
79 package Test::J; use mro 'c3';
82 package Test::K; use mro 'c3';
83 use base qw/Test::J Test::I/;
84 sub testmeth { shift->next::method }
88 mro::get_linear_isa('Test::A'),
90 ), '... got the right C3 merge order for Test::A');
93 mro::get_linear_isa('Test::B'),
95 ), '... got the right C3 merge order for Test::B');
98 mro::get_linear_isa('Test::C'),
100 ), '... got the right C3 merge order for Test::C');
103 mro::get_linear_isa('Test::D'),
104 [ qw(Test::D Test::A Test::B Test::C) ]
105 ), '... got the right C3 merge order for Test::D');
108 mro::get_linear_isa('Test::E'),
109 [ qw(Test::E Test::D Test::A Test::B Test::C) ]
110 ), '... got the right C3 merge order for Test::E');
113 mro::get_linear_isa('Test::F'),
114 [ qw(Test::F Test::E Test::D Test::A Test::B Test::C) ]
115 ), '... got the right C3 merge order for Test::F');
118 mro::get_linear_isa('Test::G'),
119 [ qw(Test::G Test::D Test::A Test::B Test::C) ]
120 ), '... got the right C3 merge order for Test::G');
123 mro::get_linear_isa('Test::H'),
124 [ qw(Test::H Test::G Test::D Test::A Test::B Test::C) ]
125 ), '... got the right C3 merge order for Test::H');
128 mro::get_linear_isa('Test::I'),
129 [ qw(Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ]
130 ), '... got the right C3 merge order for Test::I');
133 mro::get_linear_isa('Test::J'),
134 [ qw(Test::J Test::F Test::E Test::D Test::A Test::B Test::C) ]
135 ), '... got the right C3 merge order for Test::J');
138 mro::get_linear_isa('Test::K'),
139 [ qw(Test::K Test::J Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ]
140 ), '... got the right C3 merge order for Test::K');
142 is(Test::K->testmeth(), "right", 'next::method working ok');