12 use Test::More tests => 12;
16 This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
19 Level 5 8 | A | 9 | B | A | C | (More General)
31 Level 3 4 | G | 6 | E | |
36 Level 2 3 | H | 5 | F | |
44 Level 1 1 | J | 2 | I | |
49 Level 0 0 | K | (More Specialized)
59 package Test::A; use mro 'c3';
61 package Test::B; use mro 'c3';
63 package Test::C; use mro 'c3';
65 package Test::D; use mro 'c3';
66 use base qw/Test::A Test::B Test::C/;
68 package Test::E; use mro 'c3';
71 package Test::F; use mro 'c3';
73 sub testmeth { "wrong" }
75 package Test::G; use mro 'c3';
78 package Test::H; use mro 'c3';
81 package Test::I; use mro 'c3';
82 use base qw/Test::H Test::F/;
83 sub testmeth { "right" }
85 package Test::J; use mro 'c3';
88 package Test::K; use mro 'c3';
89 use base qw/Test::J Test::I/;
90 sub testmeth { shift->next::method }
94 mro::get_linear_isa('Test::A'),
96 '... got the right C3 merge order for Test::A');
99 mro::get_linear_isa('Test::B'),
101 '... got the right C3 merge order for Test::B');
104 mro::get_linear_isa('Test::C'),
106 '... got the right C3 merge order for Test::C');
109 mro::get_linear_isa('Test::D'),
110 [ qw(Test::D Test::A Test::B Test::C) ],
111 '... got the right C3 merge order for Test::D');
114 mro::get_linear_isa('Test::E'),
115 [ qw(Test::E Test::D Test::A Test::B Test::C) ],
116 '... got the right C3 merge order for Test::E');
119 mro::get_linear_isa('Test::F'),
120 [ qw(Test::F Test::E Test::D Test::A Test::B Test::C) ],
121 '... got the right C3 merge order for Test::F');
124 mro::get_linear_isa('Test::G'),
125 [ qw(Test::G Test::D Test::A Test::B Test::C) ],
126 '... got the right C3 merge order for Test::G');
129 mro::get_linear_isa('Test::H'),
130 [ qw(Test::H Test::G Test::D Test::A Test::B Test::C) ],
131 '... got the right C3 merge order for Test::H');
134 mro::get_linear_isa('Test::I'),
135 [ qw(Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ],
136 '... got the right C3 merge order for Test::I');
139 mro::get_linear_isa('Test::J'),
140 [ qw(Test::J Test::F Test::E Test::D Test::A Test::B Test::C) ],
141 '... got the right C3 merge order for Test::J');
144 mro::get_linear_isa('Test::K'),
145 [ qw(Test::K Test::J Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ],
146 '... got the right C3 merge order for Test::K');
148 is(Test::K->testmeth(), "right", 'next::method working ok');