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