Default parameters to read-only
[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(
36 default_age => 7,
753682d4 37);
38
39isa_ok($role, 'Moose::Meta::Role', 'generate_role created a role');
40
59a0f991 41is($role->parameters, $parameters, 'the generated role knows its parameters');
42
c389f1df 43is($parameters->default_age, 7);
44is($args{operating_on}, $role, "we pass in the role metaclass that we're operating on");
45
46my $age_attr = $role->get_attribute('age');
47is($age_attr->{default}, 7, "role's age attribute has the right default");
753682d4 48
dbb3fea2 49my $birthday_method = $role->get_method('birthday');
50is($birthday_method->name, 'birthday', "method name");
33b2d773 51is($birthday_method->package_name, $role->name, "package name");