Commit | Line | Data |
763002b3 |
1 | |
2 | use strict; |
3 | use warnings; |
4 | |
5 | use Test::More tests => 8; |
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 | |
31 | is_deeply( |
32 | mro::get_linear_isa('GGG'), |
33 | [ 'GGG', 'FFF', 'EEE', 'BBB', 'AAA', 'CCC', 'DDD' ], |
34 | "get_linear_isa for GGG", |
35 | ); |
36 | |
37 | is_deeply( |
38 | mro::get_linear_isa('GGG3'), |
39 | [ 'GGG3', 'FFF3', 'EEE3', 'BBB3', 'CCC3', 'DDD3', 'AAA3' ], |
40 | "get_linear_isa for GGG3", |
41 | ); |
42 | |
221173f0 |
43 | SKIP: { |
44 | skip "Does not work like this on 5.9.5+", 1 if $] > 5.009_004; |
45 | is(FFF3->testsub(), 'FFF3_first_in_dfs', 'dfs resolution pre-init'); |
46 | } |
763002b3 |
47 | |
48 | Class::C3::initialize(); |
49 | |
50 | is(FFF3->testsub(), 'FFF3_first_in_c3', 'c3 resolution post-init'); |
51 | |
52 | mro::set_mro('FFF3', 'dfs'); |
53 | is_deeply( |
54 | mro::get_linear_isa('FFF3'), |
55 | [ 'FFF3', 'EEE3', 'BBB3', 'AAA3', 'CCC3', 'DDD3' ], |
56 | "get_linear_isa for FFF3 (dfs)", |
57 | ); |
58 | |
59 | is(FFF3->testsub(), 'FFF3_first_in_dfs', 'dfs resolution post- setmro dfs'); |
60 | |
61 | is_deeply( |
62 | mro::get_linear_isa('GGG3'), |
63 | [ 'GGG3', 'FFF3', 'EEE3', 'BBB3', 'CCC3', 'DDD3', 'AAA3' ], |
64 | "get_linear_isa for GGG3 (still c3)", |
65 | ); |