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