File: 004-with.t

package info (click to toggle)
libmoosex-role-parameterized-perl 1.11-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 464 kB
  • sloc: perl: 439; makefile: 2
file content (64 lines) | stat: -rw-r--r-- 1,134 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use strict;
use warnings;
use Test::More 0.88;

do {
    package MyItem::Role::Wearable;
    use Moose::Role;

    has is_worn => (
        is => 'rw',
        isa => 'Bool',
        default => 0,
    );

    sub equip { shift->is_worn(1) }
    sub remove { shift->is_worn(0) }
};

do {
    package MyItem::Role::Equippable;
    use MooseX::Role::Parameterized;

    parameter slot => (
        isa      => 'Str',
        required => 1,
    );

    role {
        my $p = shift;

        with 'MyItem::Role::Wearable';

        method slot => sub { $p->slot };
    };
};

do {
    package MyItem::Helmet;
    use Moose;
    with 'MyItem::Role::Equippable' => {
        slot => 'head',
    };
};

do {
    package MyItem::Belt;
    use Moose;
    with 'MyItem::Role::Equippable' => {
        slot => 'waist',
    };
};

can_ok('MyItem::Helmet', qw/is_worn equip remove slot/);
can_ok('MyItem::Belt', qw/is_worn equip remove slot/);

my $visored = MyItem::Helmet->new(is_worn => 1);
ok($visored->is_worn);
is($visored->slot, 'head');

my $utility = MyItem::Belt->new;
ok(!$utility->is_worn);
is($utility->slot, 'waist');

done_testing;