Small optimisations, by Brandon Black
[p5sagit/p5-mst-13.2.git] / t / mro / dbic_c3.t
CommitLineData
e1a479c5 1#!./perl
2
3use strict;
4use warnings;
5BEGIN {
6 unless (-d 'blib') {
7 chdir 't' if -d 't';
8 @INC = '../lib';
9 }
10}
11
12use Test::More tests => 1;
13
14=pod
15
16This example is taken from the inheritance graph of DBIx::Class::Core in DBIx::Class v0.07002:
17(No ASCII art this time, this graph is insane)
18
19The xx:: prefixes are just to be sure these bogus declarations never stomp on real ones
20
21=cut
22
23{
24 package xx::DBIx::Class::Core; use mro 'c3';
25 our @ISA = qw/
26 xx::DBIx::Class::Serialize::Storable
27 xx::DBIx::Class::InflateColumn
28 xx::DBIx::Class::Relationship
29 xx::DBIx::Class::PK::Auto
30 xx::DBIx::Class::PK
31 xx::DBIx::Class::Row
32 xx::DBIx::Class::ResultSourceProxy::Table
33 xx::DBIx::Class::AccessorGroup
34 /;
35
36 package xx::DBIx::Class::InflateColumn; use mro 'c3';
37 our @ISA = qw/ xx::DBIx::Class::Row /;
38
39 package xx::DBIx::Class::Row; use mro 'c3';
40 our @ISA = qw/ xx::DBIx::Class /;
41
42 package xx::DBIx::Class; use mro 'c3';
43 our @ISA = qw/
44 xx::DBIx::Class::Componentised
45 xx::Class::Data::Accessor
46 /;
47
48 package xx::DBIx::Class::Relationship; use mro 'c3';
49 our @ISA = qw/
50 xx::DBIx::Class::Relationship::Helpers
51 xx::DBIx::Class::Relationship::Accessor
52 xx::DBIx::Class::Relationship::CascadeActions
53 xx::DBIx::Class::Relationship::ProxyMethods
54 xx::DBIx::Class::Relationship::Base
55 xx::DBIx::Class
56 /;
57
58 package xx::DBIx::Class::Relationship::Helpers; use mro 'c3';
59 our @ISA = qw/
60 xx::DBIx::Class::Relationship::HasMany
61 xx::DBIx::Class::Relationship::HasOne
62 xx::DBIx::Class::Relationship::BelongsTo
63 xx::DBIx::Class::Relationship::ManyToMany
64 /;
65
66 package xx::DBIx::Class::Relationship::ProxyMethods; use mro 'c3';
67 our @ISA = qw/ xx::DBIx::Class /;
68
69 package xx::DBIx::Class::Relationship::Base; use mro 'c3';
70 our @ISA = qw/ xx::DBIx::Class /;
71
72 package xx::DBIx::Class::PK::Auto; use mro 'c3';
73 our @ISA = qw/ xx::DBIx::Class /;
74
75 package xx::DBIx::Class::PK; use mro 'c3';
76 our @ISA = qw/ xx::DBIx::Class::Row /;
77
78 package xx::DBIx::Class::ResultSourceProxy::Table; use mro 'c3';
79 our @ISA = qw/
80 xx::DBIx::Class::AccessorGroup
81 xx::DBIx::Class::ResultSourceProxy
82 /;
83
84 package xx::DBIx::Class::ResultSourceProxy; use mro 'c3';
85 our @ISA = qw/ xx::DBIx::Class /;
86
87 package xx::Class::Data::Accessor; our @ISA = (); use mro 'c3';
88 package xx::DBIx::Class::Relationship::HasMany; our @ISA = (); use mro 'c3';
89 package xx::DBIx::Class::Relationship::HasOne; our @ISA = (); use mro 'c3';
90 package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = (); use mro 'c3';
91 package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = (); use mro 'c3';
92 package xx::DBIx::Class::Componentised; our @ISA = (); use mro 'c3';
93 package xx::DBIx::Class::AccessorGroup; our @ISA = (); use mro 'c3';
94 package xx::DBIx::Class::Serialize::Storable; our @ISA = (); use mro 'c3';
95 package xx::DBIx::Class::Relationship::Accessor; our @ISA = (); use mro 'c3';
96 package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = (); use mro 'c3';
97}
98
99is_deeply(
100 mro::get_linear_isa('xx::DBIx::Class::Core'),
101 [qw/
102 xx::DBIx::Class::Core
103 xx::DBIx::Class::Serialize::Storable
104 xx::DBIx::Class::InflateColumn
105 xx::DBIx::Class::Relationship
106 xx::DBIx::Class::Relationship::Helpers
107 xx::DBIx::Class::Relationship::HasMany
108 xx::DBIx::Class::Relationship::HasOne
109 xx::DBIx::Class::Relationship::BelongsTo
110 xx::DBIx::Class::Relationship::ManyToMany
111 xx::DBIx::Class::Relationship::Accessor
112 xx::DBIx::Class::Relationship::CascadeActions
113 xx::DBIx::Class::Relationship::ProxyMethods
114 xx::DBIx::Class::Relationship::Base
115 xx::DBIx::Class::PK::Auto
116 xx::DBIx::Class::PK
117 xx::DBIx::Class::Row
118 xx::DBIx::Class::ResultSourceProxy::Table
119 xx::DBIx::Class::AccessorGroup
120 xx::DBIx::Class::ResultSourceProxy
121 xx::DBIx::Class
122 xx::DBIx::Class::Componentised
123 xx::Class::Data::Accessor
124 /],
125 '... got the right C3 merge order for xx::DBIx::Class::Core');