From: Shawn M Moore Date: Sat, 16 May 2009 15:02:31 +0000 (-0400) Subject: Add failing test for anonymous method metaclass persistency X-Git-Tag: 0.80~83 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2de3231bf09248102e1e2afa8a272a1a6a793455;p=gitmo%2FMoose.git Add failing test for anonymous method metaclass persistency --- diff --git a/t/100_bugs/024_anon_method_metaclass.t b/t/100_bugs/024_anon_method_metaclass.t new file mode 100644 index 0000000..2b97cc8 --- /dev/null +++ b/t/100_bugs/024_anon_method_metaclass.t @@ -0,0 +1,42 @@ +use strict; +use warnings; +use Test::More tests => 8; + +do { + package Ball; + use Moose; + + package Arbitrary::Roll; + use Moose::Role; +}; + +my $method_meta = Moose::Meta::Class->create_anon_class( + superclasses => ['Moose::Meta::Method'], + roles => ['Arbitrary::Roll'], +); + +# For comparing identity without actually keeping $original_meta around +my $original_meta = "$method_meta"; + +my $method_class = $method_meta->name; + +my $method_object = $method_class->wrap( + sub { 'ok' }, + associated_metaclass => Ball->meta, + package_name => 'Ball', + name => 'bounce', +); + +Ball->meta->add_method(bounce => $method_object); + +for (1, 2) { + is(Ball->bounce, 'ok', "method still exists on Ball"); + is(Ball->meta->get_method('bounce')->meta->name, $method_class, "method's package still exists"); + is(Ball->meta->get_method('bounce')->meta . '', $original_meta, "method's metaclass still exists"); + ok(Ball->meta->get_method('bounce')->meta->does_role('Arbitrary::Roll'), "method still does Arbitrary::Roll"); + + diag 'undef $method_meta' if $method_meta; + undef $method_meta; +}; + +