This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make MM_VMS::oneline build continuation lines properly.
[perl5.git] / t / mro / complex_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 => 12);
9
10 =pod
11
12 This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
13
14                ---     ---     ---
15 Level 5     8 | A | 9 | B | A | C |    (More General)
16                ---     ---     ---       V
17                   \     |     /          |
18                    \    |    /           |
19                     \   |   /            |
20                      \  |  /             |
21                        ---               |
22 Level 4             7 | D |              |
23                        ---               |
24                       /   \              |
25                      /     \             |
26                   ---       ---          |
27 Level 3        4 | G |   6 | E |         |
28                   ---       ---          |
29                    |         |           |
30                    |         |           |
31                   ---       ---          |
32 Level 2        3 | H |   5 | F |         |
33                   ---       ---          |
34                       \   /  |           |
35                        \ /   |           |
36                         \    |           |
37                        / \   |           |
38                       /   \  |           |
39                   ---       ---          |
40 Level 1        1 | J |   2 | I |         |
41                   ---       ---          |
42                     \       /            |
43                      \     /             |
44                        ---               v
45 Level 0             0 | K |            (More Specialized)
46                        ---
47
48
49 0123456789A
50 KJIHGFEDABC
51
52 =cut
53
54 {
55     package 텟Ṱ::ᐊ; use mro 'c3';
56
57     package 텟Ṱ::ḅ; use mro 'c3';
58
59     package 텟Ṱ::ȼ; use mro 'c3';
60
61     package 텟Ṱ::Ḏ; use mro 'c3';
62     use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/;
63
64     package 텟Ṱ::Ӭ; use mro 'c3';
65     use base qw/텟Ṱ::Ḏ/;
66
67     package 텟Ṱ::Ḟ; use mro 'c3';
68     use base qw/텟Ṱ::Ӭ/;
69     sub testmèth { "wrong" }
70
71     package 텟Ṱ::ḡ; use mro 'c3';
72     use base qw/텟Ṱ::Ḏ/;
73
74     package 텟Ṱ::Ḣ; use mro 'c3';
75     use base qw/텟Ṱ::ḡ/;
76
77     package 텟Ṱ::ᶦ; use mro 'c3';
78     use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/;
79     sub testmèth { "right" }
80
81     package 텟Ṱ::J; use mro 'c3';
82     use base qw/텟Ṱ::Ḟ/;
83
84     package 텟Ṱ::Ḵ; use mro 'c3';
85     use base qw/텟Ṱ::J 텟Ṱ::ᶦ/;
86     sub testmèth { shift->next::method }
87 }
88
89 ok(eq_array(
90     mro::get_linear_isa('텟Ṱ::ᐊ'),
91     [ qw(텟Ṱ::ᐊ) ]
92 ), '... got the right C3 merge order for 텟Ṱ::ᐊ');
93
94 ok(eq_array(
95     mro::get_linear_isa('텟Ṱ::ḅ'),
96     [ qw(텟Ṱ::ḅ) ]
97 ), '... got the right C3 merge order for 텟Ṱ::ḅ');
98
99 ok(eq_array(
100     mro::get_linear_isa('텟Ṱ::ȼ'),
101     [ qw(텟Ṱ::ȼ) ]
102 ), '... got the right C3 merge order for 텟Ṱ::ȼ');
103
104 ok(eq_array(
105     mro::get_linear_isa('텟Ṱ::Ḏ'),
106     [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
107 ), '... got the right C3 merge order for 텟Ṱ::Ḏ');
108
109 ok(eq_array(
110     mro::get_linear_isa('텟Ṱ::Ӭ'),
111     [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
112 ), '... got the right C3 merge order for 텟Ṱ::Ӭ');
113
114 ok(eq_array(
115     mro::get_linear_isa('텟Ṱ::Ḟ'),
116     [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
117 ), '... got the right C3 merge order for 텟Ṱ::Ḟ');
118
119 ok(eq_array(
120     mro::get_linear_isa('텟Ṱ::ḡ'),
121     [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
122 ), '... got the right C3 merge order for 텟Ṱ::ḡ');
123
124 ok(eq_array(
125     mro::get_linear_isa('텟Ṱ::Ḣ'),
126     [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
127 ), '... got the right C3 merge order for 텟Ṱ::Ḣ');
128
129 ok(eq_array(
130     mro::get_linear_isa('텟Ṱ::ᶦ'),
131     [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
132 ), '... got the right C3 merge order for 텟Ṱ::ᶦ');
133
134 ok(eq_array(
135     mro::get_linear_isa('텟Ṱ::J'),
136     [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
137 ), '... got the right C3 merge order for 텟Ṱ::J');
138
139 ok(eq_array(
140     mro::get_linear_isa('텟Ṱ::Ḵ'),
141     [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
142 ), '... got the right C3 merge order for 텟Ṱ::Ḵ');
143
144 is(텟Ṱ::Ḵ->testmèth(), "right", 'next::method working ok');