Commit | Line | Data |
665e848b |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
d4408bfd |
4 | use Test::More tests => 14; |
69d1f098 |
5 | use Test::Exception; |
6 | |
665e848b |
7 | use MooseX::Role::Parameterized::Parameters; |
8 | |
9 | my $p = MooseX::Role::Parameterized::Parameters->new; |
10 | can_ok($p => 'meta'); |
11 | |
69d1f098 |
12 | do { |
13 | package MyRole::NoParameters; |
14 | use MooseX::Role::Parameterized; |
15 | }; |
16 | |
f8f36548 |
17 | my $parameters_metaclass = MyRole::NoParameters->meta->parameters_metaclass; |
18 | is($parameters_metaclass->get_all_attributes, 0, "no parameters"); |
31fb288b |
19 | |
20 | do { |
21 | package MyRole::LengthParameter; |
22 | use MooseX::Role::Parameterized; |
23 | |
24 | parameter length => ( |
31fb288b |
25 | isa => 'Int', |
26 | required => 1, |
27 | ); |
28 | }; |
29 | |
f8f36548 |
30 | $parameters_metaclass = MyRole::LengthParameter->meta->parameters_metaclass; |
31 | is($parameters_metaclass->get_all_attributes, 1, "exactly one parameter"); |
31fb288b |
32 | |
f8f36548 |
33 | my $parameter = ($parameters_metaclass->get_all_attributes)[0]; |
d4408bfd |
34 | isa_ok($parameter, 'MooseX::Role::Parameterized::Meta::Parameter'); |
31fb288b |
35 | is($parameter->name, 'length', "parameter name"); |
36 | ok($parameter->is_required, "parameter is required"); |
69d1f098 |
37 | |
f74750fb |
38 | throws_ok { |
39 | MyRole::LengthParameter->meta->construct_parameters; |
40 | } qr/^Attribute \(length\) is required/; |
41 | |
42 | $p = MyRole::LengthParameter->meta->construct_parameters( |
43 | length => 5, |
44 | ); |
45 | |
46 | is($p->length, 5, "correct length"); |
095cfb3d |
47 | |
c627ed85 |
48 | throws_ok { |
49 | $p->length(10); |
50 | } qr/^Cannot assign a value to a read-only accessor/; |
51 | |
095cfb3d |
52 | do { |
53 | package MyRole::LengthParameter; |
54 | use MooseX::Role::Parameterized; |
55 | |
bd3dd853 |
56 | parameter ['first_name', 'last_name'] => ( |
095cfb3d |
57 | is => 'rw', |
58 | isa => 'Str', |
59 | ); |
60 | }; |
61 | |
f8f36548 |
62 | $parameters_metaclass = MyRole::LengthParameter->meta->parameters_metaclass; |
63 | is($parameters_metaclass->get_all_attributes, 3, "three parameters"); |
095cfb3d |
64 | |
bd3dd853 |
65 | for my $param_name ('first_name', 'last_name') { |
f8f36548 |
66 | my $param = $parameters_metaclass->get_attribute($param_name); |
bd3dd853 |
67 | is($param->type_constraint, 'Str', "$param_name type constraint"); |
68 | ok(!$param->is_required, "$param_name is optional"); |
69 | } |
095cfb3d |
70 | |