Commit | Line | Data |
d82060fe |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 7; |
7 | |
8 | BEGIN { |
9 | use_ok('metaclass'); |
10 | } |
11 | |
12 | # meta classes |
13 | { |
14 | package Foo::Meta::Instance; |
15 | use base 'Class::MOP::Instance'; |
16 | |
17 | package Bar::Meta::Instance; |
18 | use base 'Class::MOP::Instance'; |
19 | |
20 | package FooBar::Meta::Instance; |
21 | use base 'Foo::Meta::Instance', 'Bar::Meta::Instance'; |
22 | } |
23 | |
24 | $@ = undef; |
25 | eval { |
26 | package Foo; |
c23184fc |
27 | metaclass->import('instance_metaclass' => 'Foo::Meta::Instance'); |
d82060fe |
28 | }; |
29 | ok(!$@, '... Foo.meta => Foo::Meta is compatible') || diag $@; |
30 | |
31 | $@ = undef; |
32 | eval { |
33 | package Bar; |
c23184fc |
34 | metaclass->import('instance_metaclass' => 'Bar::Meta::Instance'); |
d82060fe |
35 | }; |
36 | ok(!$@, '... Bar.meta => Bar::Meta is compatible') || diag $@; |
37 | |
38 | $@ = undef; |
39 | eval { |
40 | package Foo::Foo; |
c23184fc |
41 | metaclass->import('instance_metaclass' => 'Bar::Meta::Instance'); |
d82060fe |
42 | Foo::Foo->meta->superclasses('Foo'); |
43 | }; |
44 | ok($@, '... Foo::Foo.meta => Bar::Meta is not compatible') || diag $@; |
45 | |
46 | $@ = undef; |
47 | eval { |
48 | package Bar::Bar; |
c23184fc |
49 | metaclass->import('instance_metaclass' => 'Foo::Meta::Instance'); |
d82060fe |
50 | Bar::Bar->meta->superclasses('Bar'); |
51 | }; |
52 | ok($@, '... Bar::Bar.meta => Foo::Meta is not compatible') || diag $@; |
53 | |
54 | $@ = undef; |
55 | eval { |
56 | package FooBar; |
c23184fc |
57 | metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance'); |
d82060fe |
58 | FooBar->meta->superclasses('Foo'); |
59 | }; |
60 | ok(!$@, '... FooBar.meta => FooBar::Meta is compatible') || diag $@; |
61 | |
62 | $@ = undef; |
63 | eval { |
64 | package FooBar2; |
c23184fc |
65 | metaclass->import('instance_metaclass' => 'FooBar::Meta::Instance'); |
d82060fe |
66 | FooBar2->meta->superclasses('Bar'); |
67 | }; |
68 | ok(!$@, '... FooBar2.meta => FooBar::Meta is compatible') || diag $@; |
69 | |
70 | |