Update tests
[gitmo/Mouse.git] / t / 100_bugs / failing / 018_immutable_metaclass_does_role.t
CommitLineData
4c98ebb0 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 36;
7use Test::Exception;
8
9
10
11BEGIN {
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
31my $mc = MyMetaclass->initialize('MyClass');
32isa_ok($mc, 'MyMetaclass');
33
34ok($mc->meta->does_role('MyRole'), '... the metaclass does the role');
35
36is(MyClass->meta, $mc, '... these metas are the same thing');
37is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
38
39my $a = MyClass->new;
40ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
41is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
42ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
43is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
44
45lives_ok {
46 MyClass->meta->make_immutable;
47} '... make MyClass immutable okay';
48
49is(MyClass->meta, $mc, '... these metas are still the same thing');
50is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
51
52ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
53is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
54ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
55is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
56
57lives_ok {
58 MyClass->meta->make_mutable;
59} '... make MyClass mutable okay';
60
61is(MyClass->meta, $mc, '... these metas are still the same thing');
62is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
63
64ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
65is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
66ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
67is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
68
69lives_ok {
70 MyMetaclass->meta->make_immutable;
71} '... make MyClass immutable okay';
72
73is(MyClass->meta, $mc, '... these metas are still the same thing');
74is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
75
76ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
77is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
78ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
79is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
80
81lives_ok {
82 MyClass->meta->make_immutable;
83} '... make MyClass immutable okay';
84
85is(MyClass->meta, $mc, '... these metas are still the same thing');
86is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
87
88ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
89is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
90ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
91is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
92