f7673d8eda2eed451086d40922a664585657fe11
[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(exclude => $_)->name
28     } @_
29 }
30
31 lives_ok {
32     Moose::Meta::Class->create_anon_class(
33         roles => [ excludes_roles('Role::A') ],
34     );
35 };
36
37 throws_ok {
38     Moose::Meta::Class->create_anon_class(
39         roles => [ 'Role::A', excludes_roles('Role::A') ],
40     );
41 } qr/^Conflict detected: Role Moose::Meta::Role::__ANON__::SERIAL::\d+ excludes role 'Role::A'/;
42
43 lives_ok {
44     Moose::Meta::Class->create_anon_class(
45         roles => [ 'Role::B', excludes_roles('Role::A') ],
46     );
47 };
48