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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
use strictures 1;
use Test::More;
our @tr;
sub run_for {
my $class = shift;
@tr = ();
my $obj = $class->new;
ok(!@tr, "${class}: trigger not fired with no value");
$obj = $class->new(one => 1);
is_deeply(\@tr, [ 1 ], "${class}: trigger fired on new");
my $res = $obj->one(2);
is_deeply(\@tr, [ 1, 2 ], "${class}: trigger fired on set");
is($res, 2, "${class}: return from set ok");
is($obj->one, 2, "${class}: return from accessor ok");
is_deeply(\@tr, [ 1, 2 ], "${class}: trigger not fired for accessor as get");
}
{
package Foo;
use Moo;
has one => (is => 'rw', trigger => sub { push @::tr, $_[1] });
}
run_for 'Foo';
{
package Bar;
use Sub::Quote;
use Moo;
has one => (is => 'rw', trigger => quote_sub q{ push @::tr, $_[1] });
}
run_for 'Bar';
{
package Baz;
use Sub::Quote;
use Moo;
has one => (
is => 'rw',
trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr })
);
}
run_for 'Baz';
{
package Default;
use Sub::Quote;
use Moo;
has one => (
is => 'rw',
trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr }),
default => sub { 0 }
);
}
run_for 'Default';
{
package LazyDefault;
use Sub::Quote;
use Moo;
has one => (
is => 'rw',
trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr }),
default => sub { 0 },
lazy => 1
);
}
run_for 'LazyDefault';
{
package Shaz;
use Moo;
has one => (is => 'rw', trigger => 1 );
sub _trigger_one { push @::tr, $_[1] }
}
run_for 'Shaz';
done_testing;
|