foo
[gitmo/Moose.git] / t / 043_role_composition_errors.t
CommitLineData
e46edf94 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
fa1be058 6use Test::More tests => 10;
e46edf94 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose');
11}
12
13{
14 package Foo::Role;
15 use strict;
16 use warnings;
17 use Moose::Role;
18
19 requires 'foo';
20}
21
fa1be058 22is_deeply(
23 [ sort Foo::Role->meta->get_required_method_list ],
24 [ 'foo' ],
25 '... the Foo::Role has a required method (foo)');
26
e46edf94 27# classes which does not implement required method
28{
29 package Foo::Class;
30 use strict;
31 use warnings;
32 use Moose;
33
34 ::dies_ok { with('Foo::Role') } '... no foo method implemented by Foo::Class';
35}
36
37# class which does implement required method
38{
39 package Bar::Class;
40 use strict;
41 use warnings;
42 use Moose;
43
44 ::lives_ok { with('Foo::Role') } '... has a foo method implemented by Bar::Class';
45
46 sub foo { 'Bar::Class::foo' }
47}
48
49# role which does implement required method
50{
51 package Bar::Role;
52 use strict;
53 use warnings;
54 use Moose::Role;
55
56 ::lives_ok { with('Foo::Role') } '... has a foo method implemented by Bar::Role';
57
58 sub foo { 'Bar::Role::foo' }
59}
60
fa1be058 61is_deeply(
62 [ sort Bar::Role->meta->get_required_method_list ],
63 [],
64 '... the Bar::Role has not inherited the required method from Foo::Role');
65
e46edf94 66# role which does not implement required method
67{
68 package Baz::Role;
69 use strict;
70 use warnings;
fa1be058 71 use Moose::Role;
e46edf94 72
581674fc 73 ::lives_ok { with('Foo::Role') } '... no foo method implemented by Baz::Role';
e46edf94 74}
75
fa1be058 76is_deeply(
77 [ sort Baz::Role->meta->get_required_method_list ],
78 [ 'foo' ],
79 '... the Baz::Role has inherited the required method from Foo::Role');
80
81# classes which does not implement required method
82{
83 package Baz::Class;
84 use strict;
85 use warnings;
86 use Moose;
87
88 ::dies_ok { with('Baz::Role') } '... no foo method implemented by Baz::Class2';
89}
90
91# class which does implement required method
92{
93 package Baz::Class2;
94 use strict;
95 use warnings;
96 use Moose;
97
98 ::lives_ok { with('Baz::Role') } '... has a foo method implemented by Baz::Class2';
99
100 sub foo { 'Baz::Class2::foo' }
101}
102
103