summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-10-10 11:00:39 -0400
committerJesse Luehrs <doy@tozt.net>2013-10-10 11:00:39 -0400
commit9d755b95cad511bafa00527df57794f7fa8f7adf (patch)
tree23b3315f078a6f3047747c94fbc34f7a3f521797
parent83ae3a6cfb223efe3c0f4997991ffdebe6499bdf (diff)
downloadparse-keyword-9d755b95cad511bafa00527df57794f7fa8f7adf.tar.gz
parse-keyword-9d755b95cad511bafa00527df57794f7fa8f7adf.zip
test for broken closure behavior
-rw-r--r--t/closure.t62
1 files changed, 62 insertions, 0 deletions
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;