Commit | Line | Data |
65e14c86 |
1 | #!/usr/bin/perl |
0e93d7b0 |
2 | |
65e14c86 |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 5; |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
10 | use_ok('Moose'); |
11 | } |
12 | |
13 | BEGIN { |
0e93d7b0 |
14 | package MyRole; |
15 | use Moose::Role; |
65e14c86 |
16 | |
17 | requires 'foo'; |
18 | |
0e93d7b0 |
19 | package MyMetaclass; |
65e14c86 |
20 | use Moose qw(extends with); |
21 | extends 'Moose::Meta::Class'; |
22 | with 'MyRole'; |
23 | |
24 | sub foo { 'i am foo' } |
0e93d7b0 |
25 | } |
26 | |
27 | { |
28 | package MyClass; |
65e14c86 |
29 | use metaclass ('MyMetaclass'); |
0e93d7b0 |
30 | use Moose; |
0e93d7b0 |
31 | } |
32 | |
65e14c86 |
33 | my $mc = MyMetaclass->initialize('MyClass'); |
34 | isa_ok($mc, 'MyMetaclass'); |
35 | |
36 | ok($mc->meta->does_role('MyRole'), '... the metaclass does the role'); |
37 | |
38 | is(MyClass->meta, $mc, '... these metas are the same thing'); |
39 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
40 | |
41 | my $a = MyClass->new; |
42 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
65e14c86 |
43 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
0e93d7b0 |
44 | |
65e14c86 |
45 | diag join ", " => map { $_->name } @{$mc->meta->roles}; |
46 | diag join ", " => map { $_->name } $mc->meta->calculate_all_roles; |
47 | |
48 | lives_ok { |
49 | MyClass->meta->make_immutable; |
50 | } '... make MyClass immutable okay'; |
51 | |
52 | diag join ", " => map { $_->name } @{$mc->meta->roles}; |
53 | diag join ", " => map { $_->name } $mc->meta->calculate_all_roles; |
54 | |
55 | is(MyClass->meta, $mc, '... these metas are still the same thing'); |
56 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
57 | |
0e93d7b0 |
58 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
65e14c86 |
59 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
60 | |
61 | =pod |
0e93d7b0 |
62 | |
63 | MyClass->meta->make_mutable; |
64 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
65 | |
66 | MyMetaclass->meta->make_immutable; |
67 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
68 | |
69 | MyClass->meta->make_immutable; |
70 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
71 | |