Commit | Line | Data |
763002b3 |
1 | |
2 | use strict; |
3 | use warnings; |
4 | |
fd0bf490 |
5 | use Test::More tests => 14; |
763002b3 |
6 | |
7 | BEGIN { |
8 | use_ok('MRO::Compat'); |
9 | } |
10 | |
11 | { |
12 | package AAA; our @ISA = qw//; use mro 'dfs'; |
13 | package BBB; our @ISA = qw/AAA/; use mro 'dfs'; |
14 | package CCC; our @ISA = qw/AAA/; use mro 'dfs'; |
15 | package DDD; our @ISA = qw/AAA/; use mro 'dfs'; |
16 | package EEE; our @ISA = qw/BBB CCC DDD/; use mro 'dfs'; |
17 | package FFF; our @ISA = qw/EEE DDD/; use mro 'dfs'; |
18 | package GGG; our @ISA = qw/FFF/; use mro 'dfs'; |
19 | |
20 | package AAA3; our @ISA = qw//; |
21 | sub testsub { return $_[0] . '_first_in_dfs' } |
22 | package BBB3; our @ISA = qw/AAA3/; |
23 | package CCC3; our @ISA = qw/AAA3/; |
24 | sub testsub { return $_[0] . '_first_in_c3' } |
25 | package DDD3; our @ISA = qw/AAA3/; |
26 | package EEE3; our @ISA = qw/BBB3 CCC3 DDD3/; |
27 | package FFF3; our @ISA = qw/EEE3 DDD3/; use mro 'c3'; |
28 | package GGG3; our @ISA = qw/FFF3/; use mro 'c3'; |
29 | } |
30 | |
fd0bf490 |
31 | is(mro::get_mro('FFF3'), 'c3'); |
32 | |
763002b3 |
33 | is_deeply( |
34 | mro::get_linear_isa('GGG'), |
35 | [ 'GGG', 'FFF', 'EEE', 'BBB', 'AAA', 'CCC', 'DDD' ], |
36 | "get_linear_isa for GGG", |
37 | ); |
38 | |
39 | is_deeply( |
40 | mro::get_linear_isa('GGG3'), |
41 | [ 'GGG3', 'FFF3', 'EEE3', 'BBB3', 'CCC3', 'DDD3', 'AAA3' ], |
42 | "get_linear_isa for GGG3", |
43 | ); |
44 | |
221173f0 |
45 | SKIP: { |
46 | skip "Does not work like this on 5.9.5+", 1 if $] > 5.009_004; |
47 | is(FFF3->testsub(), 'FFF3_first_in_dfs', 'dfs resolution pre-init'); |
48 | } |
763002b3 |
49 | |
50 | Class::C3::initialize(); |
51 | |
52 | is(FFF3->testsub(), 'FFF3_first_in_c3', 'c3 resolution post-init'); |
53 | |
54 | mro::set_mro('FFF3', 'dfs'); |
fd0bf490 |
55 | is(mro::get_mro('FFF3'), 'dfs'); |
763002b3 |
56 | is_deeply( |
57 | mro::get_linear_isa('FFF3'), |
58 | [ 'FFF3', 'EEE3', 'BBB3', 'AAA3', 'CCC3', 'DDD3' ], |
59 | "get_linear_isa for FFF3 (dfs)", |
60 | ); |
61 | |
fd0bf490 |
62 | is(FFF3->testsub(), 'FFF3_first_in_dfs', 'dfs resolution post- set_mro dfs'); |
763002b3 |
63 | |
64 | is_deeply( |
65 | mro::get_linear_isa('GGG3'), |
66 | [ 'GGG3', 'FFF3', 'EEE3', 'BBB3', 'CCC3', 'DDD3', 'AAA3' ], |
67 | "get_linear_isa for GGG3 (still c3)", |
68 | ); |
fd0bf490 |
69 | |
70 | mro::set_mro('FFF3', 'c3'); |
71 | is(mro::get_mro('FFF3'), 'c3'); |
72 | is_deeply( |
73 | mro::get_linear_isa('FFF3'), |
74 | [ 'FFF3', 'EEE3', 'BBB3', 'CCC3', 'DDD3', 'AAA3' ], |
75 | "get_linear_isa for FFF3 (reset to c3 via set_mro)", |
76 | ); |
77 | |
78 | eval "package FFF3; use mro 'dfs'"; |
79 | is(mro::get_mro('FFF3'), 'dfs'); |
80 | is_deeply( |
81 | mro::get_linear_isa('FFF3'), |
82 | [ 'FFF3', 'EEE3', 'BBB3', 'AAA3', 'CCC3', 'DDD3' ], |
83 | "get_linear_isa for FFF3 (reset to dfs via 'use mro')", |
84 | ); |