]> git.vpit.fr Git - perl/modules/Scope-Upper.git/commitdiff
Test that goto-to-uplevel does not mess up returned values
authorVincent Pit <vince@profvince.com>
Mon, 19 Sep 2011 21:31:22 +0000 (23:31 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 19 Sep 2011 21:31:22 +0000 (23:31 +0200)
t/62-uplevel-return.t

index 1271de334e85c5bd922f2db8cb6a6152b9b57403..ff4df578b01d82b06a43b440b5bd15a94fddb1c7 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => (13 + 5 + 4) * 2 + 1 + (3 + 3 + 1) + 11;
+use Test::More tests => (13 + 5 + 4) * 2 + 1 + (3 + 3 + 1) + 2 + 11;
 
 use Scope::Upper qw<uplevel HERE UP>;
 
@@ -149,6 +149,30 @@ for my $run (1 .. 3) {
  is_deeply \@ret, [ qw|< ( A B [ { * } ] Z ) >| ], "$desc: outside";
 }
 
+# goto
+
+SKIP: {
+ skip "goto to an uplevel'd stack frame does not work on perl 5\.6"
+                                                           => 2 if "$]" < 5.008;
+
+ {
+  my $desc = 'values returned from goto';
+  local $@;
+  my $cb  = sub { 'hello' };
+  my @ret = eval {
+   'a', sub {
+    'b', sub {
+     'c', &uplevel(sub {
+       'd', (goto $cb), 'w'
+     } => UP), 'x'
+    }->(), 'y'
+   }->(), 'z'
+  };
+  is        $@,    '',                        "$desc: did not croak";
+  is_deeply \@ret, [ qw<a b c hello x y z> ], "$desc: returned values";
+ }
+}
+
 # Magic
 
 {