summaryrefslogtreecommitdiff
path: root/t/mro/next_method_in_anon.t
diff options
context:
space:
mode:
Diffstat (limited to 't/mro/next_method_in_anon.t')
-rw-r--r--t/mro/next_method_in_anon.t57
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');
+
+