This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
lib/locale.t: Improve debug output
[perl5.git] / t / mro / basic_03_c3_utf8.t
1 #!./perl
2
3 use strict;
4 use warnings;
5 use utf8;
6 use open qw( :utf8 :std );
7
8 require q(./test.pl); plan(tests => 4);
9
10 =pod
11
12 This example is take from: http://www.python.org/2.3/mro.html
13
14 "My second example"
15 class O: pass
16 class F(O): pass
17 class E(O): pass
18 class D(O): pass
19 class C(D,F): pass
20 class B(E,D): pass
21 class A(B,C): pass
22
23                            6
24                           ---
25 Level 3                  | O |
26                        /  ---  \
27                       /    |    \
28                      /     |     \
29                     /      |      \
30                   ---     ---    ---
31 Level 2        2 | E | 4 | D |  | F | 5
32                   ---     ---    ---
33                    \      / \     /
34                     \    /   \   /
35                      \  /     \ /
36                       ---     ---
37 Level 1            1 | B |   | C | 3
38                       ---     ---
39                        \       /
40                         \     /
41                           ---
42 Level 0                0 | A |
43                           ---
44
45 >>> A.mro()
46 (<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>,
47 <class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>,
48 <type 'object'>)
49
50 =cut
51
52 {
53     package 텟ţ::ᴼ;
54     use mro 'c3';
55     
56     sub ᴼ_or_Ḋ { '텟ţ::ᴼ' }
57     sub ᴼ_or_Ḟ { '텟ţ::ᴼ' }    
58     
59     package 텟ţ::Ḟ;
60     use base '텟ţ::ᴼ';
61     use mro 'c3';
62     
63     sub ᴼ_or_Ḟ { '텟ţ::Ḟ' }    
64     
65     package 텟ţ::ऍ;
66     use base '텟ţ::ᴼ';
67     use mro 'c3';
68         
69     package 텟ţ::Ḋ;
70     use base '텟ţ::ᴼ';    
71     use mro 'c3';
72     
73     sub ᴼ_or_Ḋ { '텟ţ::Ḋ' }
74     sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
75         
76     package 텟ţ::ƈ;
77     use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
78     use mro 'c3';    
79
80     sub ƈ_or_Ḋ { '텟ţ::ƈ' }
81     
82     package 텟ţ::ᛒ;
83     use base ('텟ţ::ऍ', '텟ţ::Ḋ');
84     use mro 'c3';
85         
86     package 텟ţ::ଅ;
87     use base ('텟ţ::ᛒ', '텟ţ::ƈ');
88     use mro 'c3';
89 }
90
91 ok(eq_array(
92     mro::get_linear_isa('텟ţ::ଅ'),
93     [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::ऍ 텟ţ::ƈ 텟ţ::Ḋ 텟ţ::Ḟ 텟ţ::ᴼ) ]
94 ), '... got the right MRO for 텟ţ::ଅ');      
95     
96 is(텟ţ::ଅ->ᴼ_or_Ḋ, '텟ţ::Ḋ', '... got the right method dispatch');    
97 is(텟ţ::ଅ->ᴼ_or_Ḟ, '텟ţ::Ḟ', '... got the right method dispatch');   
98
99 # NOTE: 
100 # this test is particularly interesting because the p5 dispatch
101 # would actually call 텟ţ::Ḋ before 텟ţ::ƈ and 텟ţ::Ḋ is a
102 # subclass of 텟ţ::ƈ 
103 is(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::ƈ', '... got the right method dispatch');