Benchmark-DKbench
view release on metacpan or search on metacpan
data/t/attributes/attribute_delegation.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use Test::Fatal;
# -------------------------------------------------------------------
# HASH handles
# -------------------------------------------------------------------
# the canonical form of of the 'handles'
# option is the hash ref mapping a
# method name to the delegated method name
{
package Foo;
use Moose;
has 'bar' => (is => 'rw', default => 10);
sub baz { 42 }
package Bar;
use Moose;
has 'foo' => (
is => 'rw',
default => sub { Foo->new },
handles => {
'foo_bar' => 'bar',
foo_baz => 'baz',
'foo_bar_to_20' => [ bar => 20 ],
},
);
}
my $bar = Bar->new;
isa_ok($bar, 'Bar');
ok($bar->foo, '... we have something in bar->foo');
isa_ok($bar->foo, 'Foo');
my $meth = Bar->meta->get_method('foo_bar');
isa_ok($meth, 'Moose::Meta::Method::Delegation');
is($meth->associated_attribute->name, 'foo',
'associated_attribute->name for this method is foo');
is($bar->foo->bar, 10, '... bar->foo->bar returned the right default');
can_ok($bar, 'foo_bar');
is($bar->foo_bar, 10, '... bar->foo_bar delegated correctly');
# change the value ...
$bar->foo->bar(30);
# and make sure the delegation picks it up
is($bar->foo->bar, 30, '... bar->foo->bar returned the right (changed) value');
is($bar->foo_bar, 30, '... bar->foo_bar delegated correctly');
# change the value through the delegation ...
$bar->foo_bar(50);
( run in 0.946 second using v1.01-cache-2.11-cpan-54e63673c56 )