16 my ( $attr1, $attr2, $attr3, $no_inline ) = @_;
18 my $class = Moose::Meta::Class->create(
20 superclasses => ['Moose::Object'],
24 push @traits, 'NoInlineAttribute'
27 $class->add_attribute(
32 handles => { 'invoke_callback' => 'execute' },
37 $class->add_attribute(
42 handles => { 'invoke_method_callback' => 'execute_method' },
47 $class->add_attribute(
52 handles => { 'multiply' => 'execute' },
65 callback => sub { ++$i },
66 callback_method => sub { shift->multiply(@_) },
67 multiplier => sub { $_[0] * 2 },
70 run_tests( build_class, \$i, \%subs );
72 run_tests( build_class( undef, undef, undef, 1 ), \$i, \%subs );
77 lazy => 1, default => sub { $subs{callback} }
79 lazy => 1, default => sub { $subs{callback_method} }
81 lazy => 1, default => sub { $subs{multiplier} }
89 my ( $class, $iref, @args ) = @_;
93 "Code trait didn't create reader method for $_"
94 ) for qw(callback callback_method multiplier);
98 my $obj = $class->new(@args);
100 $obj->invoke_callback;
102 is( ${$iref}, 1, '$i is 1 after invoke_callback' );
105 $obj->invoke_method_callback(3), 6,
106 'invoke_method_callback calls multiply with @_'
109 is( $obj->multiply(3), 6, 'multiple double value' );