Change the API of generate_role to a hash so we can specify more
[gitmo/MooseX-Role-Parameterized.git] / t / 007-excludes.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 3;
5 use Test::Exception;
6
7 do {
8     package MyRole::Excluder;
9     use MooseX::Role::Parameterized;
10
11     parameter exclude => (
12         is  => 'rw',
13         isa => 'Str',
14     );
15
16     role {
17         my $p = shift;
18         excludes $p->exclude;
19     };
20 };
21
22 Moose::Meta::Role->create("Role::A");
23 Moose::Meta::Role->create("Role::B");
24
25 sub excludes_roles {
26     map {
27         MyRole::Excluder->meta->generate_role(
28             parameters => {
29                 exclude => $_,
30             },
31         )->name
32     } @_
33 }
34
35 lives_ok {
36     Moose::Meta::Class->create_anon_class(
37         roles => [ excludes_roles('Role::A') ],
38     );
39 };
40
41 throws_ok {
42     Moose::Meta::Class->create_anon_class(
43         roles => [ 'Role::A', excludes_roles('Role::A') ],
44     );
45 } qr/^Conflict detected: Role Moose::Meta::Role::__ANON__::SERIAL::\d+ excludes role 'Role::A'/;
46
47 lives_ok {
48     Moose::Meta::Class->create_anon_class(
49         roles => [ 'Role::B', excludes_roles('Role::A') ],
50     );
51 };
52