Commit | Line | Data |
65e14c86 |
1 | #!/usr/bin/perl |
0e93d7b0 |
2 | |
65e14c86 |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
b10dde3a |
7 | use Test::Fatal; |
65e14c86 |
8 | |
7ff56534 |
9 | |
65e14c86 |
10 | BEGIN { |
0e93d7b0 |
11 | package MyRole; |
12 | use Moose::Role; |
65e14c86 |
13 | |
14 | requires 'foo'; |
15 | |
0e93d7b0 |
16 | package MyMetaclass; |
65e14c86 |
17 | use Moose qw(extends with); |
18 | extends 'Moose::Meta::Class'; |
19 | with 'MyRole'; |
d03bd989 |
20 | |
21 | sub foo { 'i am foo' } |
0e93d7b0 |
22 | } |
23 | |
24 | { |
25 | package MyClass; |
65e14c86 |
26 | use metaclass ('MyMetaclass'); |
0e93d7b0 |
27 | use Moose; |
0e93d7b0 |
28 | } |
29 | |
65e14c86 |
30 | my $mc = MyMetaclass->initialize('MyClass'); |
31 | isa_ok($mc, 'MyMetaclass'); |
32 | |
33 | ok($mc->meta->does_role('MyRole'), '... the metaclass does the role'); |
34 | |
35 | is(MyClass->meta, $mc, '... these metas are the same thing'); |
36 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
37 | |
38 | my $a = MyClass->new; |
39 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
40 | is( $a->meta->foo, 'i am foo', '... foo method returns expected value' ); |
65e14c86 |
41 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
42 | is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' ); |
0e93d7b0 |
43 | |
b10dde3a |
44 | is( exception { |
65e14c86 |
45 | MyClass->meta->make_immutable; |
b10dde3a |
46 | }, undef, '... make MyClass immutable okay' ); |
65e14c86 |
47 | |
65e14c86 |
48 | is(MyClass->meta, $mc, '... these metas are still the same thing'); |
49 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
50 | |
0e93d7b0 |
51 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
52 | is( $a->meta->foo, 'i am foo', '... foo method returns expected value' ); |
65e14c86 |
53 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
54 | is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' ); |
65e14c86 |
55 | |
b10dde3a |
56 | is( exception { |
59ab4a2e |
57 | MyClass->meta->make_mutable; |
b10dde3a |
58 | }, undef, '... make MyClass mutable okay' ); |
59ab4a2e |
59 | |
60 | is(MyClass->meta, $mc, '... these metas are still the same thing'); |
61 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
62 | |
0e93d7b0 |
63 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
64 | is( $a->meta->foo, 'i am foo', '... foo method returns expected value' ); |
59ab4a2e |
65 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
66 | is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' ); |
59ab4a2e |
67 | |
b10dde3a |
68 | is( exception { |
59ab4a2e |
69 | MyMetaclass->meta->make_immutable; |
b10dde3a |
70 | }, undef, '... make MyMetaclass immutable okay' ); |
59ab4a2e |
71 | |
72 | is(MyClass->meta, $mc, '... these metas are still the same thing'); |
73 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
74 | |
0e93d7b0 |
75 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
76 | is( $a->meta->foo, 'i am foo', '... foo method returns expected value' ); |
59ab4a2e |
77 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
78 | is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' ); |
59ab4a2e |
79 | |
b10dde3a |
80 | is( exception { |
59ab4a2e |
81 | MyClass->meta->make_immutable; |
b10dde3a |
82 | }, undef, '... make MyClass immutable (again) okay' ); |
59ab4a2e |
83 | |
84 | is(MyClass->meta, $mc, '... these metas are still the same thing'); |
85 | is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing'); |
0e93d7b0 |
86 | |
0e93d7b0 |
87 | ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
88 | is( $a->meta->foo, 'i am foo', '... foo method returns expected value' ); |
59ab4a2e |
89 | ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' ); |
fa25f290 |
90 | is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' ); |
0e93d7b0 |
91 | |
a28e50e4 |
92 | done_testing; |