summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-10-20 15:05:54 -0500
committerJesse Luehrs <doy@tozt.net>2010-10-20 15:05:54 -0500
commit460a4d15ded58deecdacebbd9b68844d6768892b (patch)
treecfe8a078d0d6850e8a23dc519bdef1c597533a45 /t
parentce19c70b6c5870c9ee5f8fd6548cd172719e8aa3 (diff)
downloadeval-closure-460a4d15ded58deecdacebbd9b68844d6768892b.tar.gz
eval-closure-460a4d15ded58deecdacebbd9b68844d6768892b.zip
another test
Diffstat (limited to 't')
-rw-r--r--t/02-close-over.t51
1 files changed, 51 insertions, 0 deletions
diff --git a/t/02-close-over.t b/t/02-close-over.t
new file mode 100644
index 0000000..ea6792a
--- /dev/null
+++ b/t/02-close-over.t
@@ -0,0 +1,51 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+use Eval::Closure;
+
+use Test::Requires 'PadWalker';
+
+{
+ my $foo = [];
+ my $env = { '$foo' => \$foo };
+
+ my $code = eval_closure(
+ source => 'sub { push @$foo, @_ }',
+ environment => $env,
+ );
+ is_deeply(scalar(PadWalker::closed_over($code)), $env,
+ "closed over the right things");
+}
+
+{
+ my $foo = {};
+ my $bar = [];
+ my $env = { '$foo' => \$bar, '$bar' => \$foo };
+
+ my $code = eval_closure(
+ source => 'sub { push @$foo, @_; $bar->{foo} = \@_ }',
+ environment => $env,
+ );
+ is_deeply(scalar(PadWalker::closed_over($code)), $env,
+ "closed over the right things");
+}
+
+{
+ local $TODO = "we still have to close over \$__captures";
+ my $foo = [];
+ my $env = { '$foo' => \$foo };
+
+ my $code = eval_closure(
+ source => 'sub { push @$foo, @_; return $__captures }',
+ environment => $env,
+ );
+ is_deeply(scalar(PadWalker::closed_over($code)), $env,
+ "closed over the right things");
+}
+
+# it'd be nice if we could test that closing over other things wasn't possible,
+# but perl's optimizer gets in the way of that
+
+done_testing;