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