4 use Test::More tests => 12;
12 The following class hierarhcy is very contrived
13 and totally horrid (it won't work under C3 even),
14 but it tests a number of aspect of this module.
16 A more real-world example would be a nice addition :)
23 sub BUILD { 'Foo::BUILD' }
24 sub foo { 'Foo::foo' }
29 sub BUILD { 'Bar::BUILD' }
30 sub bar { 'Bar::bar' }
35 sub baz { 'Baz::baz' }
36 sub foo { 'Baz::foo' }
39 our @ISA = ('Foo', 'Bar');
41 sub BUILD { 'Foo::Bar::BUILD' }
42 sub foobar { 'Foo::Bar::foobar' }
44 package Foo::Bar::Baz;
45 our @ISA = ('Foo', 'Bar', 'Baz');
47 sub BUILD { 'Foo::Bar::Baz::BUILD' }
48 sub bar { 'Foo::Bar::Baz::bar' }
49 sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' }
52 ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')),
53 '... Foo::BUILD has not next method');
55 is(Class::MOP::Class->initialize('Bar')->find_next_method_by_name('BUILD'),
56 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
57 '... Bar::BUILD does have a next method');
59 is(Class::MOP::Class->initialize('Baz')->find_next_method_by_name('BUILD'),
60 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
61 '... Baz->BUILD does have a next method');
63 is(Class::MOP::Class->initialize('Foo::Bar')->find_next_method_by_name('BUILD'),
64 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
65 '... Foo::Bar->BUILD does have a next method');
67 is(Class::MOP::Class->initialize('Foo::Bar::Baz')->find_next_method_by_name('BUILD'),
68 Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
69 '... Foo::Bar::Baz->BUILD does have a next method');
72 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->get_all_methods() ],
74 Class::MOP::Class->initialize('Foo')->get_method('BUILD') ,
75 Class::MOP::Class->initialize('Foo')->get_method('foo'),
77 '... got the right list of applicable methods for Foo');
80 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->get_all_methods() ],
82 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
83 Class::MOP::Class->initialize('Bar')->get_method('bar'),
84 Class::MOP::Class->initialize('Foo')->get_method('foo'),
86 '... got the right list of applicable methods for Bar');
90 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->get_all_methods() ],
92 Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
93 Class::MOP::Class->initialize('Bar')->get_method('bar'),
94 Class::MOP::Class->initialize('Baz')->get_method('baz'),
95 Class::MOP::Class->initialize('Baz')->get_method('foo'),
97 '... got the right list of applicable methods for Baz');
100 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar')->get_all_methods() ],
102 Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD'),
103 Class::MOP::Class->initialize('Bar')->get_method('bar'),
104 Class::MOP::Class->initialize('Foo')->get_method('foo'),
105 Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar'),
107 '... got the right list of applicable methods for Foo::Bar');
109 # test compute_all_applicable_methods once for compat
111 [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar::Baz')->compute_all_applicable_methods() ],
115 class => 'Foo::Bar::Baz',
116 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
120 class => 'Foo::Bar::Baz',
121 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar')
126 code => Class::MOP::Class->initialize('Baz')->get_method('baz')
131 code => Class::MOP::Class->initialize('Foo')->get_method('foo')
135 class => 'Foo::Bar::Baz',
136 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz')
139 '... got the right list of applicable methods for Foo::Bar::Baz');
141 ## find_all_methods_by_name
144 [ Class::MOP::Class->initialize('Foo::Bar')->find_all_methods_by_name('BUILD') ],
149 code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
154 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
159 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
162 '... got the right list of BUILD methods for Foo::Bar');
165 [ Class::MOP::Class->initialize('Foo::Bar::Baz')->find_all_methods_by_name('BUILD') ],
169 class => 'Foo::Bar::Baz',
170 code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
175 code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
180 code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
183 '... got the right list of BUILD methods for Foo::Bar::Baz');