X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F004_advanced_methods.t;h=392ff39446ea2b8bbf14fac34f009b2ad8b56dd0;hb=87b69f581c2f92a8e2f46dfa5ec0f35e2fbf17a1;hp=83efe4243a23aa62a0509d79a46d15d5f1a66248;hpb=1a7ebbb3e44301a39a8b5c57542ca8ae76a3e2d0;p=gitmo%2FClass-MOP.git diff --git a/t/004_advanced_methods.t b/t/004_advanced_methods.t index 83efe42..392ff39 100644 --- a/t/004_advanced_methods.t +++ b/t/004_advanced_methods.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 9; +use Test::More tests => 14; use Test::Exception; BEGIN { @@ -36,7 +36,6 @@ A more real-world example would be a nice addition :) package Baz; our @ISA = ('Bar'); - sub BUILD { 'Baz::BUILD' } sub baz { 'Baz::baz' } sub foo { 'Baz::foo' } @@ -54,123 +53,91 @@ A more real-world example would be a nice addition :) 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() ], + [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->get_all_methods() ], [ - { - name => 'BUILD', - class => 'Foo', - code => \&Foo::BUILD - }, - { - name => 'foo', - class => 'Foo', - code => \&Foo::foo - }, + Class::MOP::Class->initialize('Foo')->get_method('BUILD') , + Class::MOP::Class->initialize('Foo')->get_method('foo'), ], '... got the right list of applicable methods for Foo'); is_deeply( - [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->compute_all_applicable_methods() ], + [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->get_all_methods() ], [ - { - name => 'BUILD', - class => 'Bar', - code => \&Bar::BUILD - }, - { - name => 'bar', - class => 'Bar', - code => \&Bar::bar - }, - { - name => 'foo', - class => 'Foo', - code => \&Foo::foo - }, + Class::MOP::Class->initialize('Bar')->get_method('BUILD'), + Class::MOP::Class->initialize('Bar')->get_method('bar'), + Class::MOP::Class->initialize('Foo')->get_method('foo'), ], '... got the right list of applicable methods for Bar'); is_deeply( - [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->compute_all_applicable_methods() ], - [ - { - name => 'BUILD', - class => 'Baz', - code => \&Baz::BUILD - }, - { - name => 'bar', - class => 'Bar', - code => \&Bar::bar - }, - { - name => 'baz', - class => 'Baz', - code => \&Baz::baz - }, - { - name => 'foo', - class => 'Baz', - code => \&Baz::foo - }, + [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->get_all_methods() ], + [ + Class::MOP::Class->initialize('Bar')->get_method('BUILD'), + Class::MOP::Class->initialize('Bar')->get_method('bar'), + Class::MOP::Class->initialize('Baz')->get_method('baz'), + Class::MOP::Class->initialize('Baz')->get_method('foo'), ], '... got the right list of applicable methods for Baz'); is_deeply( - [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar')->compute_all_applicable_methods() ], + [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar')->get_all_methods() ], [ - { - name => 'BUILD', - class => 'Foo::Bar', - code => \&Foo::Bar::BUILD - }, - { - name => 'bar', - class => 'Bar', - code => \&Bar::bar - }, - { - name => 'foo', - class => 'Foo', - code => \&Foo::foo - }, - { - name => 'foobar', - class => 'Foo::Bar', - code => \&Foo::Bar::foobar - }, + Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD'), + Class::MOP::Class->initialize('Bar')->get_method('bar'), + Class::MOP::Class->initialize('Foo')->get_method('foo'), + Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar'), ], '... got the right list of applicable methods for Foo::Bar'); +# test compute_all_applicable_methods once for compat is_deeply( [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar::Baz')->compute_all_applicable_methods() ], [ { 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'); @@ -183,17 +150,17 @@ is_deeply( { 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'); @@ -204,22 +171,17 @@ is_deeply( { 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 - }, - { - name => 'BUILD', - class => 'Baz', - code => \&Baz::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 + '... got the right list of BUILD methods for Foo::Bar::Baz');