Only 8 tests
[gitmo/MooseX-Role-Parameterized.git] / t / 150-composite-role-application.t
CommitLineData
d41dc048 1#!/usr/bin/env perl
2use strict;
3use warnings;
4
1c274160 5use Test::More tests => 8;
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 => (
21 is => 'Int',
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
a62f2975 52lives_ok {
d41dc048 53 ok(MyDoubleConsumer->can('foo'), 'first role in composite applied successfully');
54 ok(MyDoubleConsumer->can('bar'), 'second role in composite applied successfully');
a62f2975 55} 'testing composite roles lived';
d41dc048 56
57do {
58 package MyExtendingRole;
59 use MooseX::Role::Parameterized;
60
61 parameter foo => (
62 isa => 'Int',
63 );
64
65 role {
66 my $p = shift;
67
68 with 'MyCompositeRoleA', { attribute => 'bar' };
69
70 has foo => (
71 is => 'rw',
72 default => sub { $p->foo },
73 );
74 };
75};
76
77do {
78 package MyExtendedConsumer;
79 use Moose;
80 with MyCompositeRoleA => { attribute => 'bar' },
81 MyExtendingRole => { foo => 23 };
82};
83
a62f2975 84lives_ok {
d41dc048 85 ok(MyExtendedConsumer->can('bar'), 'role composed through other role applied successfully');
86 is(MyExtendedConsumer->new->foo, 23, 'role composing other role applied successfully');
a62f2975 87} 'testing role through application through other role lived';
d41dc048 88
89do {
90 package MyRoleProxy;
91 use MooseX::Role::Parameterized;
92
93 parameter rolename => (isa => "Str");
94 parameter roleparams => (isa => "HashRef");
95
96 role {
97 my $p = shift;
98
99 with $p->rolename, $p->roleparams;
100 };
101};
102
103do {
104 package MyProxyConsumer;
105 use Moose;
106 with(
107 MyRoleProxy => {
108 rolename => 'MyCompositeRoleA',
109 roleparams => { attribute => 'baz' },
110 },
111 MyCompositeRoleB => {
112 accessor => 'qux',
113 },
114 );
115};
116
a62f2975 117lives_ok {
d41dc048 118 ok(MyProxyConsumer->can('baz'), 'proxied role got applied successfully');
119 ok(MyProxyConsumer->can('qux'), 'other role besides proxied one got applied successfully');
a62f2975 120} 'testing proxied roles lived';
d41dc048 121