Add role_for_combination to fix prole-role combination
[gitmo/MooseX-Role-Parameterized.git] / t / 150-composite-role-application.t
CommitLineData
d41dc048 1#!/usr/bin/env perl
2use strict;
3use warnings;
4
6c2c4830 5use Test::More tests => 7;
a62f2975 6use Test::Exception;
d41dc048 7
8do {
9 package MyCompositeRoleA;
10 use MooseX::Role::Parameterized;
11
12 parameter attribute => (
13 isa => 'Str',
14 required => 1,
15 );
16
17 role {
18 my $p = shift;
19
20 has $p->attribute => (
6c2c4830 21 is => 'rw',
d41dc048 22 );
23 };
24};
25
26do {
27 package MyCompositeRoleB;
28 use MooseX::Role::Parameterized;
29
30 parameter accessor => (
31 isa => 'Str',
32 required => 1,
33 );
34
35 role {
36 my $p = shift;
37
38 has $p->accessor => (
39 is => 'rw',
40 isa => 'Int',
41 );
42 };
43};
44
45do {
46 package MyDoubleConsumer;
47 use Moose;
48 with MyCompositeRoleA => { attribute => 'foo' },
49 MyCompositeRoleB => { accessor => 'bar' };
50};
51
592ff67c 52ok(MyDoubleConsumer->can('foo'), 'first role in composite applied successfully');
53ok(MyDoubleConsumer->can('bar'), 'second role in composite applied successfully');
d41dc048 54
55do {
56 package MyExtendingRole;
57 use MooseX::Role::Parameterized;
58
59 parameter foo => (
60 isa => 'Int',
61 );
62
63 role {
64 my $p = shift;
65
66 with 'MyCompositeRoleA', { attribute => 'bar' };
67
68 has foo => (
69 is => 'rw',
70 default => sub { $p->foo },
71 );
72 };
73};
74
75do {
76 package MyExtendedConsumer;
77 use Moose;
6c2c4830 78 with MyCompositeRoleA => { attribute => 'baz' },
d41dc048 79 MyExtendingRole => { foo => 23 };
80};
81
592ff67c 82ok(MyExtendedConsumer->can('baz'), 'role composed directly applied successfully');
83ok(MyExtendedConsumer->can('bar'), 'role composed through other role applied successfully');
84is(eval { MyExtendedConsumer->new->foo }, 23, 'role composing other role applied successfully');
d41dc048 85
86do {
87 package MyRoleProxy;
88 use MooseX::Role::Parameterized;
89
90 parameter rolename => (isa => "Str");
91 parameter roleparams => (isa => "HashRef");
92
93 role {
94 my $p = shift;
95
96 with $p->rolename, $p->roleparams;
97 };
98};
99
100do {
101 package MyProxyConsumer;
102 use Moose;
103 with(
104 MyRoleProxy => {
105 rolename => 'MyCompositeRoleA',
106 roleparams => { attribute => 'baz' },
107 },
108 MyCompositeRoleB => {
109 accessor => 'qux',
110 },
111 );
112};
113
592ff67c 114ok(MyProxyConsumer->can('baz'), 'proxied role got applied successfully');
115ok(MyProxyConsumer->can('qux'), 'other role besides proxied one got applied successfully');
d41dc048 116