use strict;
use warnings;
-use Test::More tests => 9;
+use Test::More tests => 14;
use Test::Exception;
BEGIN {
sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' }
}
+ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')),
+ '... Foo::BUILD has not next method');
+
+is(Class::MOP::Class->initialize('Bar')->find_next_method_by_name('BUILD'),
+ Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
+ '... Bar::BUILD does have a next method');
+
+is(Class::MOP::Class->initialize('Baz')->find_next_method_by_name('BUILD'),
+ Class::MOP::Class->initialize('Bar')->get_method('BUILD'),
+ '... Baz->BUILD does have a next method');
+
+is(Class::MOP::Class->initialize('Foo::Bar')->find_next_method_by_name('BUILD'),
+ Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
+ '... Foo::Bar->BUILD does have a next method');
+
+is(Class::MOP::Class->initialize('Foo::Bar::Baz')->find_next_method_by_name('BUILD'),
+ Class::MOP::Class->initialize('Foo')->get_method('BUILD'),
+ '... Foo::Bar::Baz->BUILD does have a next method');
+
is_deeply(
[ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->compute_all_applicable_methods() ],
[
{
name => 'BUILD',
class => 'Foo',
- code => \&Foo::BUILD
+ code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
},
{
name => 'foo',
class => 'Foo',
- code => \&Foo::foo
- },
+ code => Class::MOP::Class->initialize('Foo')->get_method('foo')
+ },
],
'... got the right list of applicable methods for Foo');
{
name => 'BUILD',
class => 'Bar',
- code => \&Bar::BUILD
+ code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
},
{
name => 'bar',
class => 'Bar',
- code => \&Bar::bar
+ code => Class::MOP::Class->initialize('Bar')->get_method('bar')
},
{
name => 'foo',
class => 'Foo',
- code => \&Foo::foo
+ code => Class::MOP::Class->initialize('Foo')->get_method('foo')
},
],
'... got the right list of applicable methods for Bar');
{
name => 'BUILD',
class => 'Bar',
- code => \&Bar::BUILD
+ code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
},
{
name => 'bar',
class => 'Bar',
- code => \&Bar::bar
+ code => Class::MOP::Class->initialize('Bar')->get_method('bar')
},
{
name => 'baz',
class => 'Baz',
- code => \&Baz::baz
+ code => Class::MOP::Class->initialize('Baz')->get_method('baz')
},
{
name => 'foo',
class => 'Baz',
- code => \&Baz::foo
+ code => Class::MOP::Class->initialize('Baz')->get_method('foo')
},
],
'... got the right list of applicable methods for Baz');
{
name => 'BUILD',
class => 'Foo::Bar',
- code => \&Foo::Bar::BUILD
+ code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
},
{
name => 'bar',
class => 'Bar',
- code => \&Bar::bar
+ code => Class::MOP::Class->initialize('Bar')->get_method('bar')
},
{
name => 'foo',
class => 'Foo',
- code => \&Foo::foo
+ code => Class::MOP::Class->initialize('Foo')->get_method('foo')
},
{
name => 'foobar',
class => 'Foo::Bar',
- code => \&Foo::Bar::foobar
+ code => Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar')
},
],
'... got the right list of applicable methods for Foo::Bar');
{
name => 'BUILD',
class => 'Foo::Bar::Baz',
- code => \&Foo::Bar::Baz::BUILD
+ code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
},
{
name => 'bar',
class => 'Foo::Bar::Baz',
- code => \&Foo::Bar::Baz::bar
+ code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar')
},
{
name => 'baz',
class => 'Baz',
- code => \&Baz::baz
+ code => Class::MOP::Class->initialize('Baz')->get_method('baz')
},
{
name => 'foo',
class => 'Foo',
- code => \&Foo::foo
+ code => Class::MOP::Class->initialize('Foo')->get_method('foo')
},
{
name => 'foobarbaz',
class => 'Foo::Bar::Baz',
- code => \&Foo::Bar::Baz::foobarbaz
+ code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz')
},
],
'... got the right list of applicable methods for Foo::Bar::Baz');
{
name => 'BUILD',
class => 'Foo::Bar',
- code => \&Foo::Bar::BUILD
+ code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
},
{
name => 'BUILD',
class => 'Foo',
- code => \&Foo::BUILD
+ code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
},
{
name => 'BUILD',
class => 'Bar',
- code => \&Bar::BUILD
+ code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
}
],
'... got the right list of BUILD methods for Foo::Bar');
{
name => 'BUILD',
class => 'Foo::Bar::Baz',
- code => \&Foo::Bar::Baz::BUILD
+ code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
},
{
name => 'BUILD',
class => 'Foo',
- code => \&Foo::BUILD
+ code => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
},
{
name => 'BUILD',
class => 'Bar',
- code => \&Bar::BUILD
+ code => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
},
],
'... got the right list of BUILD methods for Foo::Bar::Baz');
\ No newline at end of file