X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Faccessor-trigger.t;h=762b290ccebb0046e38942ba8e7415060404e640;hb=master;hp=0af7402424fa1225dc8eecaf9a2c491e4b7c5527;hpb=a16d301ee1659572170ed6baebb3f5e2451b35f5;p=gitmo%2FMoo.git diff --git a/t/accessor-trigger.t b/t/accessor-trigger.t index 0af7402..762b290 100644 --- a/t/accessor-trigger.t +++ b/t/accessor-trigger.t @@ -1,32 +1,108 @@ use strictures 1; use Test::More; -my @one_tr; +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 Class::Tiny; + use Moo; - has one => (is => 'rw', trigger => sub { push @one_tr, $_[1] }); + has one => (is => 'rw', trigger => sub { push @::tr, $_[1] }); } -my $foo = Foo->new; +run_for 'Foo'; -ok(!@one_tr, "trigger not fired with no value"); +{ + package Bar; -$foo = Foo->new(one => 1); + use Sub::Quote; + use Moo; -is_deeply(\@one_tr, [ 1 ], "trigger fired on new"); + has one => (is => 'rw', trigger => quote_sub q{ push @::tr, $_[1] }); +} -my $res = $foo->one(2); +run_for 'Bar'; -is_deeply(\@one_tr, [ 1, 2 ], "trigger fired on set"); +{ + package Baz; + + use Sub::Quote; + use Moo; + + has one => ( + is => 'rw', + trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr }) + ); +} -is($res, 2, "return from set ok"); +run_for 'Baz'; -is($foo->one, 2, "return from accessor ok"); +{ + 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] } +} -is_deeply(\@one_tr, [ 1, 2 ], "trigger not fired for accessor as get"); +run_for 'Shaz'; done_testing;