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