X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Faccessor-handles.t;h=d96abb84f3c8c95e55f65db37ce6c5f9457ebbd2;hb=e25e8acf5535c74e71e72fda414ebf9504a52ea1;hp=a0df36cc0cc1b8e1ea2bd6386933e591e9782e51;hpb=baa7d706ec5069cd0d81920aab258504653fd093;p=gitmo%2FMoo.git diff --git a/t/accessor-handles.t b/t/accessor-handles.t index a0df36c..d96abb8 100644 --- a/t/accessor-handles.t +++ b/t/accessor-handles.t @@ -7,6 +7,8 @@ use lib "t/lib"; package Baz; use Moo; sub beep {'beep'} + + sub is_passed_undefined { !defined($_[0]) ? 'bar' : 'fail' } } { @@ -44,6 +46,13 @@ use lib "t/lib"; eat_curry => [ yum => 'Curry!' ], }); has foo5 => ( is => 'ro', handles => 'ExtRobot' ); + has foo6 => ( is => 'rw', + handles => { foobot => '${\\Baz->can("beep")}'}, + default => sub { 0 } ); + has foo7 => ( is => 'rw', + handles => { foobar => '${\\Baz->can("is_passed_undefined")}'}, + default => sub { undef } ); + } my $bar = Bar->new( @@ -62,4 +71,20 @@ is $bar->beep, 'beep', 'handles loads roles'; is $bar->eat_curry, 'Curry!', 'handles works for currying'; +is $bar->foobot, 'beep', 'asserter checks for existence not truth, on false value'; + +is $bar->foobar, 'bar', 'asserter checks for existence not truth, on undef '; + +{ + local $@; + ok !eval q{ + package Baz; + use Moo; + has foo => ( is => 'ro', handles => 'Robot' ); + sub smash { 1 }; + 1; + }, 'handles will not overwrite locally defined method'; + like $@, qr{You cannot overwrite a locally defined method \(smash\) with a delegation}; +} + done_testing;