X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F003_methods.t;h=519ed7cb0b48db9b1147ba65df933b15ee2f2799;hb=28fa06b5d932b8a2f9bc1b6b394893c0d7c9efac;hp=204f882f752dda287de544a6759a87419cdef3b9;hpb=91b73829b31b4035fa1b4a6ad7587a4861961a5d;p=gitmo%2FClass-MOP.git diff --git a/t/003_methods.t b/t/003_methods.t index 204f882..519ed7c 100644 --- a/t/003_methods.t +++ b/t/003_methods.t @@ -1,5 +1,3 @@ -#!/usr/bin/perl - use strict; use warnings; @@ -10,17 +8,16 @@ use Scalar::Util qw/reftype/; BEGIN { if ( eval 'use Sub::Name (); 1;' ) { - plan tests => 65; + plan tests => 66; } else { plan skip_all => 'These tests require Sub::Name'; } } -BEGIN { - use_ok('Class::MOP'); - use_ok('Class::MOP::Class'); -} +use Class::MOP; +use Class::MOP::Class; +use Class::MOP::Method; { # This package tries to test &has_method # as exhaustively as possible. More corner @@ -74,8 +71,8 @@ BEGIN { my $Foo = Class::MOP::Class->initialize('Foo'); -ok(!$Foo->has_method('pie'), '... got the method stub pie'); -ok(!$Foo->has_method('cake'), '... got the constant method stub cake'); +ok($Foo->has_method('pie'), '... got the method stub pie'); +ok($Foo->has_method('cake'), '... got the constant method stub cake'); my $foo = sub { 'Foo::foo' }; @@ -95,6 +92,7 @@ is($foo_method->package_name, 'Foo', '... got the right package name for the met ok($Foo->has_method('foo'), '... Foo->has_method(foo) (defined with Sub::Name)'); is($Foo->get_method('foo')->body, $foo, '... Foo->get_method(foo) == \&foo'); +is($Foo->get_method('foo')->execute, 'Foo::foo', '... _method_foo->execute returns "Foo::foo"'); is(Foo->foo(), 'Foo::foo', '... Foo->foo() returns "Foo::foo"'); # now check all our other items ... @@ -166,7 +164,7 @@ is($Foo->get_method('not_a_real_method'), undef, '... Foo->get_method(not_a_real is_deeply( [ sort $Foo->get_method_list ], - [ qw(FOO_CONSTANT alias_me baaz bang bar baz blah evaled_foo floob foo) ], + [ qw(FOO_CONSTANT alias_me baaz bang bar baz blah cake evaled_foo floob foo pie) ], '... got the right method list for Foo'); is_deeply( @@ -180,9 +178,11 @@ is_deeply( bar baz blah + cake evaled_foo floob foo + pie ) ], '... got the right list of applicable methods for Foo'); @@ -193,7 +193,7 @@ dies_ok { Foo->foo } '... cannot call Foo->foo because it is not there'; is_deeply( [ sort $Foo->get_method_list ], - [ qw(FOO_CONSTANT alias_me baaz bang bar baz blah evaled_foo floob) ], + [ qw(FOO_CONSTANT alias_me baaz bang bar baz blah cake evaled_foo floob pie) ], '... got the right method list for Foo'); @@ -238,12 +238,25 @@ is_deeply( (map { $Foo->get_method($_) } qw( baz blah + cake evaled_foo floob )), $Bar->get_method('foo'), $Bar->get_method('meta'), + $Foo->get_method('pie'), ], '... got the right list of applicable methods for Bar'); +my $method = Class::MOP::Method->wrap( + name => 'objecty', + package_name => 'Whatever', + body => sub {q{I am an object, and I feel an object's pain}}, +); + +Bar->meta->add_method( $method->name, $method ); + +my $new_method = Bar->meta->get_method('objecty'); +isnt( $method, $new_method, 'add_method clones method objects as they are added' ); +is( $new_method->original_method, $method, '... the cloned method has the correct original method' );