Fix test description so it matches code.
[gitmo/Moose.git] / t / 100_bugs / 018_immutable_metaclass_does_role.t
CommitLineData
65e14c86 1#!/usr/bin/perl
0e93d7b0 2
65e14c86 3use strict;
4use warnings;
5
59ab4a2e 6use Test::More tests => 27;
65e14c86 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose');
11}
12
13BEGIN {
0e93d7b0 14 package MyRole;
15 use Moose::Role;
65e14c86 16
17 requires 'foo';
18
0e93d7b0 19 package MyMetaclass;
65e14c86 20 use Moose qw(extends with);
21 extends 'Moose::Meta::Class';
22 with 'MyRole';
23
24 sub foo { 'i am foo' }
0e93d7b0 25}
26
27{
28 package MyClass;
65e14c86 29 use metaclass ('MyMetaclass');
0e93d7b0 30 use Moose;
0e93d7b0 31}
32
65e14c86 33my $mc = MyMetaclass->initialize('MyClass');
34isa_ok($mc, 'MyMetaclass');
35
36ok($mc->meta->does_role('MyRole'), '... the metaclass does the role');
37
38is(MyClass->meta, $mc, '... these metas are the same thing');
39is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 40
41my $a = MyClass->new;
42ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
65e14c86 43ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
0e93d7b0 44
65e14c86 45lives_ok {
46 MyClass->meta->make_immutable;
47} '... make MyClass immutable okay';
48
65e14c86 49is(MyClass->meta, $mc, '... these metas are still the same thing');
50is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 51
0e93d7b0 52ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
65e14c86 53ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
54
59ab4a2e 55lives_ok {
56 MyClass->meta->make_mutable;
53104fb5 57} '... make MyClass mutable okay';
59ab4a2e 58
59is(MyClass->meta, $mc, '... these metas are still the same thing');
60is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 61
0e93d7b0 62ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
59ab4a2e 63ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
64
65lives_ok {
66 MyMetaclass->meta->make_immutable;
67} '... make MyClass immutable okay';
68
69is(MyClass->meta, $mc, '... these metas are still the same thing');
70is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 71
0e93d7b0 72ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
59ab4a2e 73ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
74
75lives_ok {
76 MyClass->meta->make_immutable;
77} '... make MyClass immutable okay';
78
79is(MyClass->meta, $mc, '... these metas are still the same thing');
80is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 81
0e93d7b0 82ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
59ab4a2e 83ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
0e93d7b0 84