Mouse::Util::does_role() respects $thing->does() method
[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
c0b18afd 89 package ClassXAFoo;
90 use MyMouseX::Foo;
91
92 extends qw(ClassA);
93
94 sub xa {}
95
96 package ClassXABar;
97 use MyMouseX::Bar;
7324ed54 98
7324ed54 99 extends qw(ClassA);
100
c0b18afd 101 sub xa {}
668f695d 102}
103
7324ed54 104does_ok(ClassA->meta, 'MyMouseX::Foo::Class');
668f695d 105does_ok(ClassA->meta->get_method('a'), 'MyMouseX::Foo::Method');
7324ed54 106
107does_ok(ClassB->meta, 'MyMouseX::Bar::Class');
668f695d 108does_ok(ClassB->meta->get_method('b'), 'MyMouseX::Bar::Method');
109
7324ed54 110
c0b18afd 111does_ok(ClassXAFoo->meta, 'MyMouseX::Foo::Class');
112does_ok(ClassXAFoo->meta->get_method('xa'), 'MyMouseX::Foo::Method');
113
114does_ok(ClassXABar->meta, 'MyMouseX::Foo::Class');
115does_ok(ClassXABar->meta->get_method('xa'), 'MyMouseX::Foo::Method');
116
117does_ok(ClassXABar->meta, 'MyMouseX::Bar::Class');
118does_ok(ClassXABar->meta->get_method('xa'), 'MyMouseX::Bar::Method');
7324ed54 119
7324ed54 120
668f695d 121done_testing;