trAvis - MANAGER
Edit File: 005-with-parameterized.t
use strict; use warnings; use Test::More; do { package MyItem::Role::Wearable; use MooseX::Role::Parameterized; parameter is_worn_default => ( is => 'rw', isa => 'Bool', default => 1, ); role { my $p = shift; has is_worn => ( is => 'rw', isa => 'Bool', default => $p->is_worn_default, ); method equip => sub { shift->is_worn(1) }; method remove => sub { shift->is_worn(0) }; }; }; do { package MyItem::Role::Equippable; use MooseX::Role::Parameterized; parameter slot => ( isa => 'Str', required => 1, ); # XXX: UGH! We need some way of making this work I think.. parameter is_worn_default => ( is => 'rw', isa => 'Bool', default => 1, ); role { my $p = shift; with 'MyItem::Role::Wearable' => { is_worn_default => $p->is_worn_default, }; method slot => sub { $p->slot }; }; }; do { package MyItem::Helmet; use Moose; with 'MyItem::Role::Equippable' => { slot => 'head', is_worn_default => 0, }; }; do { package MyItem::Belt; use Moose; with 'MyItem::Role::Equippable' => { slot => 'waist', is_worn_default => 1, }; }; can_ok('MyItem::Helmet', qw/is_worn equip remove slot/); can_ok('MyItem::Belt', qw/is_worn equip remove slot/); my $feathered = MyItem::Helmet->new; ok(!$feathered->is_worn, "default for helmet is not worn"); is($feathered->slot, 'head'); my $chastity = MyItem::Belt->new; ok($chastity->is_worn, "default for belt is worn"); is($chastity->slot, 'waist'); done_testing;