Add a todo to test metaclass compatibility
[gitmo/Mouse.git] / t / 001_mouse / 067-traits.t
CommitLineData
668f695d 1#!perl
2use strict;
3use warnings;
4
5use Test::More;
6
7use Test::Mouse qw(does_ok);
8
7324ed54 9BEGIN{ $SIG{__WARN__} = \&Carp::confess }
10
11BEGIN {
668f695d 12 package MyMouseX::Foo::Method;
13 use Mouse::Role;
14
7324ed54 15 sub foo_method {}
16
17 package MyMouseX::Foo::Class;
18 use Mouse::Role;
19
20 sub foo_class {}
668f695d 21
22 package MyMouseX::Bar::Method;
23 use Mouse::Role;
24
25 sub bar {}
26
7324ed54 27 package MyMouseX::Bar::Class;
28 use Mouse::Role;
29
30 sub bar_class {}
31}
32
33BEGIN {
668f695d 34 package MyMouseX::Foo;
35 use Mouse::Exporter;
36 use Mouse::Util::MetaRole;
37
38 Mouse::Exporter->setup_import_methods(
39 also => 'Mouse',
40 );
41 sub init_meta {
42 my(undef, %options) = @_;
43
44 my $meta = Mouse->init_meta(%options);
45 Mouse::Util::MetaRole::apply_metaroles(
46 for => $options{for_class},
47 class_metaroles => {
7324ed54 48 class => ['MyMouseX::Foo::Class'],
668f695d 49 method => ['MyMouseX::Foo::Method'],
50 },
51 );
52 }
53
54 $INC{'MyMouseX/Foo.pm'} = __FILE__;
55
56 package MyMouseX::Bar;
57 use Mouse::Exporter;
58 use Mouse::Util::MetaRole;
59
60 Mouse::Exporter->setup_import_methods(
61 also => 'Mouse',
62 );
63 sub init_meta {
64 my(undef, %options) = @_;
65
66 my $meta = Mouse->init_meta(%options);
67 Mouse::Util::MetaRole::apply_metaroles(
68 for => $options{for_class},
69 class_metaroles => {
7324ed54 70 class => ['MyMouseX::Bar::Class'],
668f695d 71 method => ['MyMouseX::Bar::Method'],
72 },
73 );
74 }
75
76 $INC{'MyMouseX/Bar.pm'} = __FILE__;
77}
78{
79 package ClassA;
80 use MyMouseX::Foo;
81
82 sub a {}
83
84 package ClassB;
85 use MyMouseX::Bar;
86
87 sub b {}
7324ed54 88
89 package ClassC;
90 use Mouse;
91
92 #extends qw(ClassB ClassA);
93 extends qw(ClassA);
94
95 sub c {}
668f695d 96}
97
7324ed54 98does_ok(ClassA->meta, 'MyMouseX::Foo::Class');
668f695d 99does_ok(ClassA->meta->get_method('a'), 'MyMouseX::Foo::Method');
7324ed54 100
101does_ok(ClassB->meta, 'MyMouseX::Bar::Class');
668f695d 102does_ok(ClassB->meta->get_method('b'), 'MyMouseX::Bar::Method');
103
7324ed54 104# for ClassC
105
106does_ok(ClassC->meta, 'MyMouseX::Foo::Class');
107
108{
109 local $TODO = 'Metaclass incompatibility is not completed';
110 does_ok(ClassC->meta->get_method('c'), 'MyMouseX::Foo::Method');
111}
112#does_ok(ClassC->meta, 'MyMouseX::Bar::Class');
113#does_ok(ClassC->meta->get_method('c'), 'MyMouseX::Bar::Method');
114
668f695d 115done_testing;