From: Vincent Pit Date: Wed, 27 Aug 2008 20:16:26 +0000 (+0200) Subject: Test caller inside callbacks X-Git-Tag: v0.20~22 X-Git-Url: http://git.vpit.fr/?a=commitdiff_plain;h=ca5538ffb33de051f881859a9a9bd1f78f806626;p=perl%2Fmodules%2FVariable-Magic.git Test caller inside callbacks --- diff --git a/t/14-callbacks.t b/t/14-callbacks.t index f3e3335..7a7948c 100644 --- a/t/14-callbacks.t +++ b/t/14-callbacks.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 7; +use Test::More tests => 12; use Variable::Magic qw/wizard cast/; @@ -26,3 +26,40 @@ eval { }; is($@, '', 'callback returning undef doesn\'t warn/croak'); is($x, $n, 'callback returning undef fails'); + +my @callers; +$wiz = wizard get => sub { + my @c; + my $i = 0; + while (@c = caller $i++) { + push @callers, [ @c[0, 1, 2] ]; + } +}; + +my $b; +cast $b, $wiz; + +my $u = $b; +is_deeply(\@callers, [ + [ 'main', $0, 42 ], +], 'caller into callback returns the right thing'); + +@callers = (); +$u = $b; +is_deeply(\@callers, [ + [ 'main', $0, 48 ], +], 'caller into callback returns the right thing (second time)'); + +{ + my $u = $b; + @callers = (); + is_deeply(\@callers, [ ], 'caller into callback into block returns the right thing'); +} + +@callers = (); +eval { my $u = $b }; +is($@, '', 'caller into callback doesn\'t croak'); +is_deeply(\@callers, [ + [ 'main', $0, 60 ], + [ 'main', $0, 60 ], +], 'caller into callback into eval returns the right thing');