Redid conversion to Test::Fatal
[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
a28e50e4 6use Test::More;
b10dde3a 7use Test::Fatal;
65e14c86 8
7ff56534 9
65e14c86 10BEGIN {
0e93d7b0 11 package MyRole;
12 use Moose::Role;
65e14c86 13
14 requires 'foo';
15
0e93d7b0 16 package MyMetaclass;
65e14c86 17 use Moose qw(extends with);
18 extends 'Moose::Meta::Class';
19 with 'MyRole';
d03bd989 20
21 sub foo { 'i am foo' }
0e93d7b0 22}
23
24{
25 package MyClass;
65e14c86 26 use metaclass ('MyMetaclass');
0e93d7b0 27 use Moose;
0e93d7b0 28}
29
65e14c86 30my $mc = MyMetaclass->initialize('MyClass');
31isa_ok($mc, 'MyMetaclass');
32
33ok($mc->meta->does_role('MyRole'), '... the metaclass does the role');
34
35is(MyClass->meta, $mc, '... these metas are the same thing');
36is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 37
38my $a = MyClass->new;
39ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 40is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 41ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 42is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
0e93d7b0 43
b10dde3a 44is( exception {
65e14c86 45 MyClass->meta->make_immutable;
b10dde3a 46}, undef, '... make MyClass immutable okay' );
65e14c86 47
65e14c86 48is(MyClass->meta, $mc, '... these metas are still the same thing');
49is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 50
0e93d7b0 51ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 52is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 53ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 54is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
65e14c86 55
b10dde3a 56is( exception {
59ab4a2e 57 MyClass->meta->make_mutable;
b10dde3a 58}, undef, '... make MyClass mutable okay' );
59ab4a2e 59
60is(MyClass->meta, $mc, '... these metas are still the same thing');
61is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 62
0e93d7b0 63ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 64is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 65ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 66is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 67
b10dde3a 68is( exception {
59ab4a2e 69 MyMetaclass->meta->make_immutable;
b10dde3a 70}, undef, '... make MyMetaclass immutable okay' );
59ab4a2e 71
72is(MyClass->meta, $mc, '... these metas are still the same thing');
73is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 74
0e93d7b0 75ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 76is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 77ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 78is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 79
b10dde3a 80is( exception {
59ab4a2e 81 MyClass->meta->make_immutable;
b10dde3a 82}, undef, '... make MyClass immutable (again) okay' );
59ab4a2e 83
84is(MyClass->meta, $mc, '... these metas are still the same thing');
85is(MyClass->meta->meta, $mc->meta, '... these meta-metas are the same thing');
0e93d7b0 86
0e93d7b0 87ok( $a->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 88is( $a->meta->foo, 'i am foo', '... foo method returns expected value' );
59ab4a2e 89ok( MyClass->meta->meta->does_role('MyRole'), 'metaclass does MyRole' );
fa25f290 90is( MyClass->meta->foo, 'i am foo', '... foo method returns expected value' );
0e93d7b0 91
a28e50e4 92done_testing;