Commit | Line | Data |
fa627596 |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
636c0aa5 |
4 | use Test::More tests => 3; |
fa627596 |
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 { |
1a8744bd |
27 | MyRole::Excluder->meta->generate_role( |
28 | parameters => { |
29 | exclude => $_, |
30 | }, |
31 | )->name |
fa627596 |
32 | } @_ |
33 | } |
34 | |
636c0aa5 |
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 | ); |
8a951e2c |
51 | }; |
fa627596 |
52 | |