File: 209_trait_code.t

package info (click to toggle)
libmoose-perl 1.09-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,004 kB
  • ctags: 1,472
  • sloc: perl: 25,387; makefile: 2
file content (48 lines) | stat: -rw-r--r-- 1,038 bytes parent folder | download
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
use strict;
use warnings;

use Test::More;

{
    package Thingy;
    use Moose;

    has callback => (
        traits   => ['Code'],
        isa      => 'CodeRef',
        required => 1,
        handles  => { 'invoke_callback' => 'execute' },
    );

    has callback_method => (
        traits   => ['Code'],
        isa      => 'CodeRef',
        required => 1,
        handles  => { 'invoke_method_callback' => 'execute_method' },
    );

    has multiplier => (
        traits   => ['Code'],
        isa      => 'CodeRef',
        required => 1,
        handles  => { 'multiply' => 'execute' },
    );
}

my $i = 0;
my $thingy = Thingy->new(
    callback        => sub { ++$i },
    multiplier      => sub { $_[0] * 2 },
    callback_method => sub { shift->multiply(@_) },
);

is($i, 0);
$thingy->invoke_callback;
is($i, 1);
is($thingy->multiply(3), 6);
is($thingy->invoke_method_callback(3), 6);

ok(!$thingy->can($_), "Code trait didn't create reader method for $_")
    for qw(callback callback_method multiplier);

done_testing;