b30f2564ef707436009c1ffa872314dee27c867a
[gitmo/MooseX-Role-Parameterized.git] / t / 002-role-block.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 8;
5 use Test::Exception;
6
7 my ($parameters, %args);
8
9 do {
10     package MyPerson;
11     use MooseX::Role::Parameterized;
12
13     parameter default_age => (
14         is       => 'rw',
15         isa      => 'Int',
16         required => 1,
17     );
18
19     role {
20         ($parameters, %args) = @_;
21
22         has age => (
23             default => $parameters->default_age,
24         );
25
26         method birthday => sub {
27             my $self = shift;
28             return 2000 - $self->age;
29         };
30     };
31 };
32
33 ok(MyPerson->meta->has_role_generator, "MyPerson has a role generator");
34
35 my $role = MyPerson->meta->generate_role(
36     default_age => 7,
37 );
38
39 isa_ok($role, 'Moose::Meta::Role', 'generate_role created a role');
40
41 is($role->parameters, $parameters, 'the generated role knows its parameters');
42
43 is($parameters->default_age, 7);
44 is($args{operating_on}, $role, "we pass in the role metaclass that we're operating on");
45
46 my $age_attr = $role->get_attribute('age');
47 is($age_attr->{default}, 7, "role's age attribute has the right default");
48
49 my $birthday_method = $role->get_method('birthday');
50 is($birthday_method->name, 'birthday', "method name");
51 is($birthday_method->package_name, $role->name, "package name");