another test
Jesse Luehrs [Wed, 20 Oct 2010 20:05:54 +0000 (15:05 -0500)]
dist.ini
t/02-close-over.t [new file with mode: 0644]

index d88c72d..435dae4 100644 (file)
--- a/dist.ini
+++ b/dist.ini
@@ -13,6 +13,7 @@ Try::Tiny = 0
 
 [Prereq / TestRequires]
 Test::More = 0.88
+Test::Requires = 0
 
 [Prereq / RuntimeRecommends]
 Perl::Tidy = 0
diff --git a/t/02-close-over.t b/t/02-close-over.t
new file mode 100644 (file)
index 0000000..ea6792a
--- /dev/null
@@ -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;