Commit | Line | Data |
eac6d242 |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
4 | use Test::More tests => 5; |
5 | use Test::Exception; |
6 | |
7 | do { |
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 | |
22 | sub requires_names { |
23 | map { |
24 | MyRole::Requires->meta->generate_role(requires => $_)->name |
25 | } @_ |
26 | } |
27 | |
28 | throws_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 | |
34 | lives_ok { |
35 | Moose::Meta::Class->create_anon_class( |
36 | methods => { |
37 | alpha => sub {}, |
38 | }, |
39 | roles => [ requires_names('alpha') ], |
40 | ); |
41 | }; |
42 | |
43 | throws_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 | |
52 | throws_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 | |
61 | lives_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 | |