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