remove trailing whitespace
[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
7ff56534 6use Test::More tests => 36;
65e14c86 7use Test::Exception;
8
7ff56534 9
65e14c86 10
11BEGIN {
0e93d7b0 12 package MyRole;
13 use Moose::Role;
65e14c86 14
15 requires 'foo';
16
0e93d7b0 17 package MyMetaclass;
65e14c86 18 use Moose qw(extends with);
19 extends 'Moose::Meta::Class';
20 with 'MyRole';
d03bd989 21
22 sub foo { 'i am foo' }
0e93d7b0 23}
24
25{
26 package MyClass;
65e14c86 27 use metaclass ('MyMetaclass');
0e93d7b0 28 use Moose;
0e93d7b0 29}
30
65e14c86 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');
0e93d7b0 38
39my $a = MyClass->new;
40ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 41is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 42ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 43is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
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' );
fa25f290 53is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 54ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 55is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 56
59ab4a2e 57lives_ok {
58 MyClass->meta->make_mutable;
53104fb5 59} '... make MyClass mutable okay';
59ab4a2e 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');
0e93d7b0 63
0e93d7b0 64ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 65is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 66ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 67is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 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');
0e93d7b0 75
0e93d7b0 76ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 77is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 78ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 79is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 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');
0e93d7b0 87
0e93d7b0 88ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 89is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 90ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 91is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
0e93d7b0 92