Remove extra newline
[gitmo/Moose.git] / t / 070_native_traits / 030_trait_code.t
CommitLineData
cdf3cae6 1use strict;
2use warnings;
3
7a9e42d0 4use Moose ();
a28e50e4 5use Test::More;
7a9e42d0 6use Test::Exception;
7use Test::Moose;
cdf3cae6 8
9{
7a9e42d0 10 my $name = 'Foo1';
11
12 sub build_class {
13 my ( $attr1, $attr2, $attr3 ) = @_;
14
15 my $class = Moose::Meta::Class->create(
16 $name++,
17 superclasses => ['Moose::Object'],
18 );
19
20 $class->add_attribute(
21 callback => (
22 traits => ['Code'],
23 isa => 'CodeRef',
24 required => 1,
25 handles => { 'invoke_callback' => 'execute' },
26 %{ $attr1 || {} },
27 )
28 );
29
30 $class->add_attribute(
31 callback_method => (
32 traits => ['Code'],
33 isa => 'CodeRef',
34 required => 1,
35 handles => { 'invoke_method_callback' => 'execute_method' },
36 %{ $attr2 || {} },
37 )
38 );
39
40 $class->add_attribute(
41 multiplier => (
42 traits => ['Code'],
43 isa => 'CodeRef',
44 required => 1,
45 handles => { 'multiply' => 'execute' },
46 %{ $attr3 || {} },
47 )
48 );
49
50 return $class->name;
51 }
52}
53
54{
55 my $i;
d9299060 56
7a9e42d0 57 my %subs = (
58 callback => sub { ++$i },
59 callback_method => sub { shift->multiply(@_) },
60 multiplier => sub { $_[0] * 2 },
cdf3cae6 61 );
63723115 62
7a9e42d0 63 run_tests( build_class, \$i, \%subs );
64
65 run_tests(
66 build_class(
67 {
68 lazy => 1, default => sub { $subs{callback} }
69 }, {
70 lazy => 1, default => sub { $subs{callback_method} }
71 }, {
72 lazy => 1, default => sub { $subs{multiplier} }
73 },
74 ),
75 \$i,
63723115 76 );
cdf3cae6 77}
78
7a9e42d0 79sub run_tests {
80 my ( $class, $iref, @args ) = @_;
81
82 ok(
83 !$class->can($_),
84 "Code trait didn't create reader method for $_"
85 ) for qw(callback callback_method multiplier);
86
87 with_immutable {
88 ${$iref} = 0;
89 my $obj = $class->new(@args);
90
91 $obj->invoke_callback;
92
93 is( ${$iref}, 1, '$i is 1 after invoke_callback' );
94
95 is(
96 $obj->invoke_method_callback(3), 6,
97 'invoke_method_callback calls multiply with @_'
98 );
99
100 is( $obj->multiply(3), 6, 'multiple double value' );
101 }
102 $class;
103}
12885414 104
a28e50e4 105done_testing;