merging the immutable branch into trunk
[gitmo/Class-MOP.git] / t / 044_instance_metaclass_incompatibility_dynamic.t
CommitLineData
d82060fe 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 7;
7
8BEGIN {
9 use_ok('metaclass');
10}
11
12# meta classes
13{
14 package Foo::Meta::Instance;
15 use base 'Class::MOP::Instance';
16
17 package Bar::Meta::Instance;
18 use base 'Class::MOP::Instance';
19
20 package FooBar::Meta::Instance;
21 use base 'Foo::Meta::Instance', 'Bar::Meta::Instance';
22}
23
24$@ = undef;
25eval {
26 package Foo;
c23184fc 27 metaclass->import('instance_metaclass' => 'Foo::Meta::Instance');
d82060fe 28};
29ok(!$@, '... Foo.meta => Foo::Meta is compatible') || diag $@;
30
31$@ = undef;
32eval {
33 package Bar;
c23184fc 34 metaclass->import('instance_metaclass' => 'Bar::Meta::Instance');
d82060fe 35};
36ok(!$@, '... Bar.meta => Bar::Meta is compatible') || diag $@;
37
38$@ = undef;
39eval {
40 package Foo::Foo;
c23184fc 41 metaclass->import('instance_metaclass' => 'Bar::Meta::Instance');
d82060fe 42 Foo::Foo->meta->superclasses('Foo');
43};
44ok($@, '... Foo::Foo.meta => Bar::Meta is not compatible') || diag $@;
45
46$@ = undef;
47eval {
48 package Bar::Bar;
c23184fc 49 metaclass->import('instance_metaclass' => 'Foo::Meta::Instance');
d82060fe 50 Bar::Bar->meta->superclasses('Bar');
51};
52ok($@, '... Bar::Bar.meta => Foo::Meta is not compatible') || diag $@;
53
54$@ = undef;
55eval {
56 package FooBar;
c23184fc 57 metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance');
d82060fe 58 FooBar->meta->superclasses('Foo');
59};
60ok(!$@, '... FooBar.meta => FooBar::Meta is compatible') || diag $@;
61
62$@ = undef;
63eval {
64 package FooBar2;
c23184fc 65 metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance');
d82060fe 66 FooBar2->meta->superclasses('Bar');
67};
68ok(!$@, '... FooBar2.meta => FooBar::Meta is compatible') || diag $@;
69
70