Commit | Line | Data |
38bf2a25 |
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; |