diff options
Diffstat (limited to 't/mro/next_method_in_anon.t')
-rw-r--r-- | t/mro/next_method_in_anon.t | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/t/mro/next_method_in_anon.t b/t/mro/next_method_in_anon.t new file mode 100644 index 0000000000..e135d540dd --- /dev/null +++ b/t/mro/next_method_in_anon.t @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +=pod + +This tests the successful handling of a next::method call from within an +anonymous subroutine. + +=cut + +{ + package A; + use mro 'c3'; + + sub foo { + return 'A::foo'; + } + + sub bar { + return 'A::bar'; + } +} + +{ + package B; + use base 'A'; + use mro 'c3'; + + sub foo { + my $code = sub { + return 'B::foo => ' . (shift)->next::method(); + }; + return (shift)->$code; + } + + sub bar { + my $code1 = sub { + my $code2 = sub { + return 'B::bar => ' . (shift)->next::method(); + }; + return (shift)->$code2; + }; + return (shift)->$code1; + } +} + +is(B->foo, "B::foo => A::foo", + 'method resolved inside anonymous sub'); + +is(B->bar, "B::bar => A::bar", + 'method resolved inside nested anonymous subs'); + + |