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; |
11 | use base 'Class::MOP::Class'; |
12 | |
13 | package Bar::Meta; |
14 | use base 'Class::MOP::Class'; |
15 | |
16 | package FooBar::Meta; |
17 | use base 'Foo::Meta', 'Bar::Meta'; |
18 | } |
19 | |
20 | $@ = undef; |
21 | eval { |
22 | package Foo; |
23 | metaclass->import('Foo::Meta'); |
24 | }; |
25 | ok(!$@, '... Foo.meta => Foo::Meta is compatible') || diag $@; |
26 | |
27 | $@ = undef; |
28 | eval { |
29 | package Bar; |
30 | metaclass->import('Bar::Meta'); |
31 | }; |
32 | ok(!$@, '... Bar.meta => Bar::Meta is compatible') || diag $@; |
33 | |
34 | $@ = undef; |
35 | eval { |
36 | package Foo::Foo; |
37 | metaclass->import('Bar::Meta'); |
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('Foo::Meta'); |
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('FooBar::Meta'); |
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('FooBar::Meta'); |
62 | FooBar2->meta->superclasses('Bar'); |
63 | }; |
64 | ok(!$@, '... FooBar2.meta => FooBar::Meta is compatible') || diag $@; |
65 | |
66 | done_testing; |