6 use Test::More tests => 12;
10 use Class::MOP::Class;
14 The following class hierarhcy is very contrived
15 and totally horrid (it won't work under C3 even),
16 but it tests a number of aspect of this module.
18 A more real-world example would be a nice addition :)
25 sub BUILD { 'Foo::BUILD' }
26 sub foo { 'Foo::foo' }
31 sub BUILD { 'Bar::BUILD' }
32 sub bar { 'Bar::bar' }
37 sub baz { 'Baz::baz' }
38 sub foo { 'Baz::foo' }
41 our @ISA = ('Foo', 'Bar');
43 sub BUILD { 'Foo::Bar::BUILD' }
44 sub foobar { 'Foo::Bar::foobar' }
46 package Foo::Bar::Baz;
47 our @ISA = ('Foo', 'Bar', 'Baz');
49 sub BUILD { 'Foo::Bar::Baz::BUILD' }
50 sub bar { 'Foo::Bar::Baz::bar' }
51 sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' }
54 ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')),
55 '... Foo::BUILD has not next method');
57 is(Class::MOP::Class->initialize('Bar')->find_next_method_by_name('BUILD'),
58 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
59 '... Bar::BUILD does have a next method');
61 is(Class::MOP::Class->initialize('Baz')->find_next_method_by_name('BUILD'),
62 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
63 '... Baz->BUILD does have a next method');
65 is(Class::MOP::Class->initialize('Foo::Bar')->find_next_method_by_name('BUILD'),
66 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
67 '... Foo::Bar->BUILD does have a next method');
69 is(Class::MOP::Class->initialize('Foo::Bar::Baz')->find_next_method_by_name('BUILD'),
70 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
71 '... Foo::Bar::Baz->BUILD does have a next method');
74 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->get_all_methods() ],
76 Class::MOP::Class->initialize('Foo')->get_method('BUILD') ,
77 Class::MOP::Class->initialize('Foo')->get_method('foo'),
79 '... got the right list of applicable methods for Foo');
82 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->get_all_methods() ],
84 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
85 Class::MOP::Class->initialize('Bar')->get_method('bar'),
86 Class::MOP::Class->initialize('Foo')->get_method('foo'),
88 '... got the right list of applicable methods for Bar');
92 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->get_all_methods() ],
94 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
95 Class::MOP::Class->initialize('Bar')->get_method('bar'),
96 Class::MOP::Class->initialize('Baz')->get_method('baz'),
97 Class::MOP::Class->initialize('Baz')->get_method('foo'),
99 '... got the right list of applicable methods for Baz');
102 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar')->get_all_methods() ],
104 Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD'),
105 Class::MOP::Class->initialize('Bar')->get_method('bar'),
106 Class::MOP::Class->initialize('Foo')->get_method('foo'),
107 Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar'),
109 '... got the right list of applicable methods for Foo::Bar');
111 # test compute_all_applicable_methods once for compat
113 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar::Baz')->compute_all_applicable_methods() ],
117 class => 'Foo::Bar::Baz',
118 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
122 class => 'Foo::Bar::Baz',
123 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar')
128 code => Class::MOP::Class->initialize('Baz')->get_method('baz')
133 code => Class::MOP::Class->initialize('Foo')->get_method('foo')
137 class => 'Foo::Bar::Baz',
138 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz')
141 '... got the right list of applicable methods for Foo::Bar::Baz');
143 ## find_all_methods_by_name
146 [ Class::MOP::Class->initialize('Foo::Bar')->find_all_methods_by_name('BUILD') ],
151 code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
156 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
161 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
164 '... got the right list of BUILD methods for Foo::Bar');
167 [ Class::MOP::Class->initialize('Foo::Bar::Baz')->find_all_methods_by_name('BUILD') ],
171 class => 'Foo::Bar::Baz',
172 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
177 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
182 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
185 '... got the right list of BUILD methods for Foo::Bar::Baz');