This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
reinstate cpan/IO-Compress/Makefile.PL
[perl5.git] / t / mro / dbic_dfs.t
1 #!./perl
2
3 use strict;
4 use warnings;
5
6 require q(./test.pl); plan(tests => 1);
7
8 =pod
9
10 This example is taken from the inheritance graph of DBIx::Class::Core in DBIx::Class v0.07002:
11 (No ASCII art this time, this graph is insane)
12
13 The xx:: prefixes are just to be sure these bogus declarations never stomp on real ones
14
15 =cut
16
17 {
18     package xx::DBIx::Class::Core; use mro 'dfs';
19     our @ISA = qw/
20       xx::DBIx::Class::Serialize::Storable
21       xx::DBIx::Class::InflateColumn
22       xx::DBIx::Class::Relationship
23       xx::DBIx::Class::PK::Auto
24       xx::DBIx::Class::PK
25       xx::DBIx::Class::Row
26       xx::DBIx::Class::ResultSourceProxy::Table
27       xx::DBIx::Class::AccessorGroup
28     /;
29
30     package xx::DBIx::Class::InflateColumn; use mro 'dfs';
31     our @ISA = qw/ xx::DBIx::Class::Row /;
32
33     package xx::DBIx::Class::Row; use mro 'dfs';
34     our @ISA = qw/ xx::DBIx::Class /;
35
36     package xx::DBIx::Class; use mro 'dfs';
37     our @ISA = qw/
38       xx::DBIx::Class::Componentised
39       xx::Class::Data::Accessor
40     /;
41
42     package xx::DBIx::Class::Relationship; use mro 'dfs';
43     our @ISA = qw/
44       xx::DBIx::Class::Relationship::Helpers
45       xx::DBIx::Class::Relationship::Accessor
46       xx::DBIx::Class::Relationship::CascadeActions
47       xx::DBIx::Class::Relationship::ProxyMethods
48       xx::DBIx::Class::Relationship::Base
49       xx::DBIx::Class
50     /;
51
52     package xx::DBIx::Class::Relationship::Helpers; use mro 'dfs';
53     our @ISA = qw/
54       xx::DBIx::Class::Relationship::HasMany
55       xx::DBIx::Class::Relationship::HasOne
56       xx::DBIx::Class::Relationship::BelongsTo
57       xx::DBIx::Class::Relationship::ManyToMany
58     /;
59
60     package xx::DBIx::Class::Relationship::ProxyMethods; use mro 'dfs';
61     our @ISA = qw/ xx::DBIx::Class /;
62
63     package xx::DBIx::Class::Relationship::Base; use mro 'dfs';
64     our @ISA = qw/ xx::DBIx::Class /;
65
66     package xx::DBIx::Class::PK::Auto; use mro 'dfs';
67     our @ISA = qw/ xx::DBIx::Class /;
68
69     package xx::DBIx::Class::PK; use mro 'dfs';
70     our @ISA = qw/ xx::DBIx::Class::Row /;
71
72     package xx::DBIx::Class::ResultSourceProxy::Table; use mro 'dfs';
73     our @ISA = qw/
74       xx::DBIx::Class::AccessorGroup
75       xx::DBIx::Class::ResultSourceProxy
76     /;
77
78     package xx::DBIx::Class::ResultSourceProxy; use mro 'dfs';
79     our @ISA = qw/ xx::DBIx::Class /;
80
81     package xx::Class::Data::Accessor; our @ISA = (); use mro 'dfs';
82     package xx::DBIx::Class::Relationship::HasMany; our @ISA = (); use mro 'dfs';
83     package xx::DBIx::Class::Relationship::HasOne; our @ISA = (); use mro 'dfs';
84     package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = (); use mro 'dfs';
85     package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = (); use mro 'dfs';
86     package xx::DBIx::Class::Componentised; our @ISA = (); use mro 'dfs';
87     package xx::DBIx::Class::AccessorGroup; our @ISA = (); use mro 'dfs';
88     package xx::DBIx::Class::Serialize::Storable; our @ISA = (); use mro 'dfs';
89     package xx::DBIx::Class::Relationship::Accessor; our @ISA = (); use mro 'dfs';
90     package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = (); use mro 'dfs';
91 }
92
93 ok(eq_array(
94     mro::get_linear_isa('xx::DBIx::Class::Core'),
95     [qw/
96         xx::DBIx::Class::Core
97         xx::DBIx::Class::Serialize::Storable
98         xx::DBIx::Class::InflateColumn
99         xx::DBIx::Class::Row
100         xx::DBIx::Class
101         xx::DBIx::Class::Componentised
102         xx::Class::Data::Accessor
103         xx::DBIx::Class::Relationship
104         xx::DBIx::Class::Relationship::Helpers
105         xx::DBIx::Class::Relationship::HasMany
106         xx::DBIx::Class::Relationship::HasOne
107         xx::DBIx::Class::Relationship::BelongsTo
108         xx::DBIx::Class::Relationship::ManyToMany
109         xx::DBIx::Class::Relationship::Accessor
110         xx::DBIx::Class::Relationship::CascadeActions
111         xx::DBIx::Class::Relationship::ProxyMethods
112         xx::DBIx::Class::Relationship::Base
113         xx::DBIx::Class::PK::Auto
114         xx::DBIx::Class::PK
115         xx::DBIx::Class::ResultSourceProxy::Table
116         xx::DBIx::Class::AccessorGroup
117         xx::DBIx::Class::ResultSourceProxy
118     /]
119 ), '... got the right DFS merge order for xx::DBIx::Class::Core');