X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F050_metaclasses%2F051_metarole_on_anon.t;fp=t%2F050_metaclasses%2F051_metarole_on_anon.t;h=f0ec10128042f8477b1c929dc9193454f05b26d2;hb=6475f69defb20a02b6559bddf870a0821f28ac20;hp=0000000000000000000000000000000000000000;hpb=6d5a627396f91b2dce25a7b6e5c5dbe6b67f2d95;p=gitmo%2FMouse.git diff --git a/t/050_metaclasses/051_metarole_on_anon.t b/t/050_metaclasses/051_metarole_on_anon.t new file mode 100644 index 0000000..f0ec101 --- /dev/null +++ b/t/050_metaclasses/051_metarole_on_anon.t @@ -0,0 +1,52 @@ +use strict; +use warnings; + +use Test::More; +use Test::Exception; + +use Mouse (); +use Mouse::Meta::Class; +use Mouse::Util::MetaRole; + +{ + package Foo; + use Mouse; +} + +{ + package Role::Bar; + use Mouse::Role; +} + +my $anon_name; + +{ + my $anon_class = Mouse::Meta::Class->create_anon_class( + superclasses => ['Foo'], + cache => 1, + ); + + $anon_name = $anon_class->name; + + ok( $anon_name->meta, 'anon class has a metaclass' ); +} + +ok( + $anon_name->meta, + 'cached anon class still has a metaclass after \$anon_class goes out of scope' +); + +Mouse::Util::MetaRole::apply_metaroles( + for => $anon_name, + class_metaroles => { + class => ['Role::Bar'], + }, +); + +BAIL_OUT('Cannot continue if the anon class does not have a metaclass') + unless $anon_name->can('meta'); + +my $meta = $anon_name->meta; +ok( $meta, 'cached anon class still has a metaclass applying a metarole' ); + +done_testing;