6 use Test::More tests => 14;
11 use_ok('Class::MOP::Class');
16 The following class hierarhcy is very contrived
17 and totally horrid (it won't work under C3 even),
18 but it tests a number of aspect of this module.
20 A more real-world example would be a nice addition :)
27 sub BUILD { 'Foo::BUILD' }
28 sub foo { 'Foo::foo' }
33 sub BUILD { 'Bar::BUILD' }
34 sub bar { 'Bar::bar' }
39 sub baz { 'Baz::baz' }
40 sub foo { 'Baz::foo' }
43 our @ISA = ('Foo', 'Bar');
45 sub BUILD { 'Foo::Bar::BUILD' }
46 sub foobar { 'Foo::Bar::foobar' }
48 package Foo::Bar::Baz;
49 our @ISA = ('Foo', 'Bar', 'Baz');
51 sub BUILD { 'Foo::Bar::Baz::BUILD' }
52 sub bar { 'Foo::Bar::Baz::bar' }
53 sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' }
56 ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')),
57 '... Foo::BUILD has not next method');
59 is(Class::MOP::Class->initialize('Bar')->find_next_method_by_name('BUILD'),
60 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
61 '... Bar::BUILD does have a next method');
63 is(Class::MOP::Class->initialize('Baz')->find_next_method_by_name('BUILD'),
64 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
65 '... Baz->BUILD does have a next method');
67 is(Class::MOP::Class->initialize('Foo::Bar')->find_next_method_by_name('BUILD'),
68 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
69 '... Foo::Bar->BUILD does have a next method');
71 is(Class::MOP::Class->initialize('Foo::Bar::Baz')->find_next_method_by_name('BUILD'),
72 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
73 '... Foo::Bar::Baz->BUILD does have a next method');
76 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->get_all_methods() ],
78 Class::MOP::Class->initialize('Foo')->get_method('BUILD') ,
79 Class::MOP::Class->initialize('Foo')->get_method('foo'),
81 '... got the right list of applicable methods for Foo');
84 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->get_all_methods() ],
86 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
87 Class::MOP::Class->initialize('Bar')->get_method('bar'),
88 Class::MOP::Class->initialize('Foo')->get_method('foo'),
90 '... got the right list of applicable methods for Bar');
94 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->get_all_methods() ],
96 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
97 Class::MOP::Class->initialize('Bar')->get_method('bar'),
98 Class::MOP::Class->initialize('Baz')->get_method('baz'),
99 Class::MOP::Class->initialize('Baz')->get_method('foo'),
101 '... got the right list of applicable methods for Baz');
104 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar')->get_all_methods() ],
106 Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD'),
107 Class::MOP::Class->initialize('Bar')->get_method('bar'),
108 Class::MOP::Class->initialize('Foo')->get_method('foo'),
109 Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar'),
111 '... got the right list of applicable methods for Foo::Bar');
113 # test compute_all_applicable_methods once for compat
115 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar::Baz')->compute_all_applicable_methods() ],
119 class => 'Foo::Bar::Baz',
120 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
124 class => 'Foo::Bar::Baz',
125 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar')
130 code => Class::MOP::Class->initialize('Baz')->get_method('baz')
135 code => Class::MOP::Class->initialize('Foo')->get_method('foo')
139 class => 'Foo::Bar::Baz',
140 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz')
143 '... got the right list of applicable methods for Foo::Bar::Baz');
145 ## find_all_methods_by_name
148 [ Class::MOP::Class->initialize('Foo::Bar')->find_all_methods_by_name('BUILD') ],
153 code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
158 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
163 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
166 '... got the right list of BUILD methods for Foo::Bar');
169 [ Class::MOP::Class->initialize('Foo::Bar::Baz')->find_all_methods_by_name('BUILD') ],
173 class => 'Foo::Bar::Baz',
174 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
179 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
184 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
187 '... got the right list of BUILD methods for Foo::Bar::Baz');