Change the API of generate_role to a hash so we can specify more
[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 {
1a8744bd 24 MyRole::Requires->meta->generate_role(
25 parameters => {
26 requires => $_,
27 },
28 )->name
eac6d242 29 } @_
30}
31
32throws_ok {
33 Moose::Meta::Class->create_anon_class(
34 roles => [ requires_names('alpha') ],
35 );
36} qr/'Moose::Meta::Role::__ANON__::SERIAL::\d+' requires the method 'alpha' to be implemented by 'Class::MOP::Class::__ANON__::SERIAL::\d+'/;
37
38lives_ok {
39 Moose::Meta::Class->create_anon_class(
40 methods => {
41 alpha => sub {},
42 },
43 roles => [ requires_names('alpha') ],
44 );
45};
46
47throws_ok {
48 Moose::Meta::Class->create_anon_class(
49 methods => {
50 alpha => sub {},
51 },
52 roles => [ requires_names('alpha', 'beta') ],
53 );
54} 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+'/;
55
56throws_ok {
57 Moose::Meta::Class->create_anon_class(
58 methods => {
59 beta => sub {},
60 },
61 roles => [ requires_names('alpha', 'beta') ],
62 );
63} 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+'/;
64
65lives_ok {
66 Moose::Meta::Class->create_anon_class(
67 methods => {
68 alpha => sub {},
69 beta => sub {},
70 },
71 roles => [ requires_names('alpha', 'beta') ],
72 );
73};
74