fixing theplers tests
[gitmo/Moose.git] / t / 100_bugs / 018_immutable_metaclass_does_role.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 27;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose');
11 }
12
13 BEGIN {
14     package MyRole;
15     use Moose::Role;
16
17     requires 'foo';
18
19     package MyMetaclass;
20     use Moose qw(extends with);
21     extends 'Moose::Meta::Class';
22        with 'MyRole';
23         
24     sub foo { 'i am foo' }        
25 }
26
27 {
28     package MyClass;
29     use metaclass ('MyMetaclass');
30     use Moose;
31 }
32
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');
40
41 my $a = MyClass->new;
42 ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
43 ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
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 ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
54
55 lives_ok {
56     MyClass->meta->make_mutable;
57 } '... make MyClass immutable okay';
58
59 is(MyClass->meta, $mc, '... these metas are still the same thing');
60 is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
61
62 ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
63 ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
64
65 lives_ok {
66     MyMetaclass->meta->make_immutable;
67 } '... make MyClass immutable okay';
68
69 is(MyClass->meta, $mc, '... these metas are still the same thing');
70 is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
71
72 ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
73 ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
74
75 lives_ok {
76     MyClass->meta->make_immutable;
77 } '... make MyClass immutable okay';
78
79 is(MyClass->meta, $mc, '... these metas are still the same thing');
80 is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
81
82 ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
83 ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
84