From 9d755b95cad511bafa00527df57794f7fa8f7adf Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 10 Oct 2013 11:00:39 -0400 Subject: test for broken closure behavior --- t/closure.t | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 t/closure.t diff --git a/t/closure.t b/t/closure.t new file mode 100644 index 0000000..6a2ec48 --- /dev/null +++ b/t/closure.t @@ -0,0 +1,62 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.014; +use Test::More; + +BEGIN { + package MyExample; + $INC{'MyExample.pm'} = __FILE__; + use base 'Exporter'; + use Parse::Keyword { example => \&_parse_example }; + our @EXPORT = 'example'; + sub example { + shift->(); + } + sub _parse_example { + lex_read_space; + my $code = parse_block; + lex_read_space; + return sub { $code }; + } +} + +use MyExample 'example'; + +is(example { 1 }, 1); +is(example { 2 }, 2); +is(example { 3 }, 3); + +for our $package (1..3) +{ + is(example { $package }, $package); +} + +for my $lexical (1..3) +{ + local $TODO = "broken"; + is(example { $lexical }, $lexical); +} + +sub xxxx { + my $lexical = shift; + say example { $lexical }; +} + +for (1..3) { + local $TODO = "broken" if $_ > 1; + is(xxxx($_), $_); +} + +is(xxxx(1), 1); +{ local $TODO = "broken"; +is(xxxx(2), 2); +is(xxxx(3), 3); +} + +for my $x (1..3) { + local $TODO = "broken" if $x > 1; + is(xxxx($x), $x); +} + +done_testing; -- cgit v1.2.3