Perltidy this code a bit.
[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
fa25f290 6use Test::More tests => 37;
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' );
fa25f290 43is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 44ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 45is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
0e93d7b0 46
65e14c86 47lives_ok {
48 MyClass->meta->make_immutable;
49} '... make MyClass immutable okay';
50
65e14c86 51is(MyClass->meta, $mc, '... these metas are still the same thing');
52is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 53
0e93d7b0 54ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 55is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 56ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 57is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 58
59ab4a2e 59lives_ok {
60 MyClass->meta->make_mutable;
53104fb5 61} '... make MyClass mutable okay';
59ab4a2e 62
63is(MyClass->meta, $mc, '... these metas are still the same thing');
64is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 65
0e93d7b0 66ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 67is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 68ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 69is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 70
71lives_ok {
72 MyMetaclass->meta->make_immutable;
73} '... make MyClass immutable okay';
74
75is(MyClass->meta, $mc, '... these metas are still the same thing');
76is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 77
0e93d7b0 78ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 79is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 80ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 81is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 82
83lives_ok {
84 MyClass->meta->make_immutable;
85} '... make MyClass immutable okay';
86
87is(MyClass->meta, $mc, '... these metas are still the same thing');
88is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 89
0e93d7b0 90ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 91is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 92ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 93is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
0e93d7b0 94