X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F001-parameters.t;h=6d208f1178f40e991e57e2e5736177bf62b8638d;hb=96bc1fffc9f715f21d4189b45f8461bb26a6e2cd;hp=33ce86aac5dc0c9a67eef10fd4b073f9543020c8;hpb=31fb288b6470670ed9798ac456458df002f3d7e5;p=gitmo%2FMooseX-Role-Parameterized.git diff --git a/t/001-parameters.t b/t/001-parameters.t index 33ce86a..6d208f1 100644 --- a/t/001-parameters.t +++ b/t/001-parameters.t @@ -1,7 +1,7 @@ #!/usr/bin/env perl use strict; use warnings; -use Test::More tests => 5; +use Test::More tests => 14; use Test::Exception; use MooseX::Role::Parameterized::Parameters; @@ -14,24 +14,57 @@ do { use MooseX::Role::Parameterized; }; -my $parameter_metaclass = MyRole::NoParameters->meta->parameter_metaclass; -is($parameter_metaclass->get_all_attributes, 0, "no parameters"); +my $parameters_metaclass = MyRole::NoParameters->meta->parameters_metaclass; +is($parameters_metaclass->get_all_attributes, 0, "no parameters"); do { package MyRole::LengthParameter; use MooseX::Role::Parameterized; parameter length => ( - is => 'ro', isa => 'Int', required => 1, ); }; -$parameter_metaclass = MyRole::LengthParameter->meta->parameter_metaclass; -is($parameter_metaclass->get_all_attributes, 1, "exactly one parameter"); +$parameters_metaclass = MyRole::LengthParameter->meta->parameters_metaclass; +is($parameters_metaclass->get_all_attributes, 1, "exactly one parameter"); -my $parameter = ($parameter_metaclass->get_all_attributes)[0]; +my $parameter = ($parameters_metaclass->get_all_attributes)[0]; +isa_ok($parameter, 'MooseX::Role::Parameterized::Meta::Parameter'); is($parameter->name, 'length', "parameter name"); ok($parameter->is_required, "parameter is required"); +throws_ok { + MyRole::LengthParameter->meta->construct_parameters; +} qr/^Attribute \(length\) is required/; + +$p = MyRole::LengthParameter->meta->construct_parameters( + length => 5, +); + +is($p->length, 5, "correct length"); + +throws_ok { + $p->length(10); +} qr/^Cannot assign a value to a read-only accessor/; + +do { + package MyRole::LengthParameter; + use MooseX::Role::Parameterized; + + parameter ['first_name', 'last_name'] => ( + is => 'rw', + isa => 'Str', + ); +}; + +$parameters_metaclass = MyRole::LengthParameter->meta->parameters_metaclass; +is($parameters_metaclass->get_all_attributes, 3, "three parameters"); + +for my $param_name ('first_name', 'last_name') { + my $param = $parameters_metaclass->get_attribute($param_name); + is($param->type_constraint, 'Str', "$param_name type constraint"); + ok(!$param->is_required, "$param_name is optional"); +} +