For now, forbid "alias" and "excludes" as keywords
[gitmo/MooseX-Role-Parameterized.git] / t / 006-requires.t
CommitLineData
eac6d242 1#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::More tests => 5;
5use Test::Exception;
6
7do {
8 package MyRole::Requires;
9 use MooseX::Role::Parameterized;
10
11 parameter requires => (
12 is => 'rw',
13 isa => 'Str',
14 );
15
16 role {
17 my $p = shift;
18 requires $p->requires;
19 };
20};
21
22sub requires_names {
23 map {
24 MyRole::Requires->meta->generate_role(requires => $_)->name
25 } @_
26}
27
28throws_ok {
29 Moose::Meta::Class->create_anon_class(
30 roles => [ requires_names('alpha') ],
31 );
32} qr/'Moose::Meta::Role::__ANON__::SERIAL::\d+' requires the method 'alpha' to be implemented by 'Class::MOP::Class::__ANON__::SERIAL::\d+'/;
33
34lives_ok {
35 Moose::Meta::Class->create_anon_class(
36 methods => {
37 alpha => sub {},
38 },
39 roles => [ requires_names('alpha') ],
40 );
41};
42
43throws_ok {
44 Moose::Meta::Class->create_anon_class(
45 methods => {
46 alpha => sub {},
47 },
48 roles => [ requires_names('alpha', 'beta') ],
49 );
50} qr/'Moose::Meta::Role::__ANON__::SERIAL::\d+\|Moose::Meta::Role::__ANON__::SERIAL::\d+' requires the method 'beta' to be implemented by 'Class::MOP::Class::__ANON__::SERIAL::\d+'/;
51
52throws_ok {
53 Moose::Meta::Class->create_anon_class(
54 methods => {
55 beta => sub {},
56 },
57 roles => [ requires_names('alpha', 'beta') ],
58 );
59} qr/'Moose::Meta::Role::__ANON__::SERIAL::\d+\|Moose::Meta::Role::__ANON__::SERIAL::\d+' requires the method 'alpha' to be implemented by 'Class::MOP::Class::__ANON__::SERIAL::\d+'/;
60
61lives_ok {
62 Moose::Meta::Class->create_anon_class(
63 methods => {
64 alpha => sub {},
65 beta => sub {},
66 },
67 roles => [ requires_names('alpha', 'beta') ],
68 );
69};
70