move methods back into CMOP::Class, now that they're a separate mixin
[gitmo/Class-MOP.git] / t / 043_instance_metaclass_incompat.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     use base 'Foo';
38     metaclass->import('instance_metaclass' => 'Bar::Meta::Instance');
39 };
40 ok($@, '... Foo::Foo.meta => Bar::Meta is not compatible') || diag $@;
41
42 $@ = undef;
43 eval {
44     package Bar::Bar;
45     use base 'Bar';
46     metaclass->import('instance_metaclass' => 'Foo::Meta::Instance');
47 };
48 ok($@, '... Bar::Bar.meta => Foo::Meta is not compatible') || diag $@;
49
50 $@ = undef;
51 eval {
52     package FooBar;
53     use base 'Foo';
54     metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance');
55 };
56 ok(!$@, '... FooBar.meta => FooBar::Meta is compatible') || diag $@;
57
58 $@ = undef;
59 eval {
60     package FooBar2;
61     use base 'Bar';
62     metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance');
63 };
64 ok(!$@, '... FooBar2.meta => FooBar::Meta is compatible') || diag $@;
65
66 done_testing;