5569902b99c1e0e58ba9b5f16f463258e09b76d4
[gitmo/Moose.git] / t / 070_native_traits / 209_trait_code.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 {
7     package Thingy;
8     use Moose;
9
10     has callback => (
11         traits   => ['Code'],
12         is       => 'ro',
13         isa      => 'CodeRef',
14         required => 1,
15         handles  => { 'invoke_callback' => 'execute' },
16     );
17
18     has callback_method => (
19         traits   => ['Code'],
20         is       => 'ro',
21         isa      => 'CodeRef',
22         required => 1,
23         handles  => { 'invoke_method_callback' => 'execute_method' },
24     );
25
26     has multiplier => (
27         traits   => ['Code'],
28         is       => 'ro',
29         isa      => 'CodeRef',
30         required => 1,
31         handles  => { 'multiply' => 'execute' },
32     );
33 }
34
35 my $i = 0;
36 my $thingy = Thingy->new(
37     callback        => sub { ++$i },
38     multiplier      => sub { $_[0] * 2 },
39     callback_method => sub { shift->multiply(@_) },
40 );
41
42 is($i, 0);
43 $thingy->invoke_callback;
44 is($i, 1);
45 is($thingy->multiply(3), 6);
46 is($thingy->invoke_method_callback(3), 6);
47
48 done_testing;