1#!./perl
2
3use strict;
4use warnings;
5
6use utf8;
7use open qw( :utf8 :std );
8
9require q(./test.pl); plan(tests => 2);
10
11=pod
12
13This tests a strange bug found by Matt S. Trout
14while building DBIx::Class. Thanks Matt!!!!
15
16   <A>
17  /   \
18<C>   <B>
19  \   /
20   <D>
21
22=cut
23
24{
25    packageiᚪၚd_A;
26    use mro 'dfs';
27
28    sub ᕘ { 'Diᚪၚd_A::ᕘ' }
29}
30{
31    packageiᚪၚd_B;
32    use base 'Diᚪၚd_A';
33    use mro 'dfs';
34
35    sub ᕘ { 'Diᚪၚd_B::ᕘ => ' . (shift)->SUPER::ᕘ }
36}
37{
38    packageiᚪၚd_C;
39    use mro 'dfs';
40    use base 'Diᚪၚd_A';
41
42}
43{
44    packageiᚪၚd_D;
45    use base ('Diᚪၚd_C', 'Diᚪၚd_B');
46    use mro 'dfs';
47
48    sub ᕘ { 'Diᚪၚd_D::ᕘ => ' . (shift)->SUPER::ᕘ }
49}
50
51ok(eq_array(
52    mro::get_linear_isa('Diᚪၚd_D'),
53    [ qw(Diᚪၚd_Diᚪၚd_Ciᚪၚd_Aiᚪၚd_B) ]
54), '... got the right MRO for Diᚪၚd_D');
55
56is(Diᚪၚd_D->ᕘ,
57   'Diᚪၚd_D::ᕘ => Diᚪၚd_A::ᕘ',
58   '... got the right next::method dispatch path');
59