Default parameters to read-only
[gitmo/MooseX-Role-Parameterized.git] / t / 004-with.t
CommitLineData
d55c8861 1#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::More tests => 6;
5
6do {
7 package MyItem::Role::Wearable;
8 use Moose::Role;
9
10 has is_worn => (
11 is => 'rw',
12 isa => 'Bool',
13 default => 0,
14 );
15
16 sub equip { shift->is_worn(1) }
17 sub remove { shift->is_worn(0) }
18};
19
20do {
21 package MyItem::Role::Equippable;
22 use MooseX::Role::Parameterized;
23
24 parameter slot => (
d55c8861 25 isa => 'Str',
26 required => 1,
27 );
28
29 role {
30 my $p = shift;
31
32 with 'MyItem::Role::Wearable';
33
34 method slot => sub { $p->slot };
35 };
36};
37
38do {
39 package MyItem::Helmet;
40 use Moose;
41 with 'MyItem::Role::Equippable' => {
42 slot => 'head',
43 };
44};
45
46do {
47 package MyItem::Belt;
48 use Moose;
49 with 'MyItem::Role::Equippable' => {
50 slot => 'waist',
51 };
52};
53
54can_ok('MyItem::Helmet', qw/is_worn equip remove slot/);
55can_ok('MyItem::Belt', qw/is_worn equip remove slot/);
56
57my $visored = MyItem::Helmet->new(is_worn => 1);
58ok($visored->is_worn);
59is($visored->slot, 'head');
60
61my $utility = MyItem::Belt->new;
62ok(!$utility->is_worn);
63is($utility->slot, 'waist');
64