Implement strict constructors, which will warn unkown constructor arguments
[gitmo/Mouse.git] / t / 050_metaclasses / 051_metarole_on_anon.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6
7 use Mouse ();
8 use Mouse::Meta::Class;
9 use Mouse::Util::MetaRole;
10
11 {
12     package Foo;
13     use Mouse;
14 }
15
16 {
17     package Role::Bar;
18     use Mouse::Role;
19 }
20
21 my $anon_name;
22
23 {
24     my $anon_class = Mouse::Meta::Class->create_anon_class(
25         superclasses => ['Foo'],
26         cache        => 1,
27     );
28
29     $anon_name = $anon_class->name;
30
31     ok( $anon_name->meta, 'anon class has a metaclass' );
32 }
33
34 ok(
35     $anon_name->meta,
36     'cached anon class still has a metaclass after \$anon_class goes out of scope'
37 );
38
39 Mouse::Util::MetaRole::apply_metaroles(
40     for             => $anon_name,
41     class_metaroles => {
42         class => ['Role::Bar'],
43     },
44 );
45
46 BAIL_OUT('Cannot continue if the anon class does not have a metaclass')
47     unless $anon_name->can('meta');
48
49 my $meta = $anon_name->meta;
50 ok( $meta, 'cached anon class still has a metaclass applying a metarole' );
51
52 done_testing;