Change the API of generate_role to a hash so we can specify more
[gitmo/MooseX-Role-Parameterized.git] / t / 007-excludes.t
CommitLineData
fa627596 1#!/usr/bin/env perl
2use strict;
3use warnings;
636c0aa5 4use Test::More tests => 3;
fa627596 5use Test::Exception;
6
7do {
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
22Moose::Meta::Role->create("Role::A");
23Moose::Meta::Role->create("Role::B");
24
25sub excludes_roles {
26 map {
1a8744bd 27 MyRole::Excluder->meta->generate_role(
28 parameters => {
29 exclude => $_,
30 },
31 )->name
fa627596 32 } @_
33}
34
636c0aa5 35lives_ok {
36 Moose::Meta::Class->create_anon_class(
37 roles => [ excludes_roles('Role::A') ],
38 );
39};
40
41throws_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
47lives_ok {
48 Moose::Meta::Class->create_anon_class(
49 roles => [ 'Role::B', excludes_roles('Role::A') ],
50 );
8a951e2c 51};
fa627596 52