Revert autogenerated tests. Tests should not changed radically.
[gitmo/Mouse.git] / t / 100_bugs / failing / 018_immutable_metaclass_does_role.t
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