summaryrefslogtreecommitdiffstats
path: root/t/01-basic.t
diff options
context:
space:
mode:
Diffstat (limited to 't/01-basic.t')
-rw-r--r--t/01-basic.t48
1 files changed, 37 insertions, 11 deletions
diff --git a/t/01-basic.t b/t/01-basic.t
index 82224d9..7856f6e 100644
--- a/t/01-basic.t
+++ b/t/01-basic.t
@@ -2,22 +2,48 @@
use strict;
use warnings;
use Test::More;
+use Test::Exception;
use Eval::Closure;
-my $foo = [];
+{
+ my $code = eval_closure(
+ source => 'sub { die "called\n" }',
+ );
+ ok($code, "got something");
-my $code = eval_closure(
- source => 'sub { push @$bar, @_ }',
- environment => {
- '$bar' => \$foo,
- },
- name => 'test',
-);
-ok($code, "got something");
+ throws_ok { $code->() } qr/^called$/, "got the right thing";
+}
-$code->(1);
+{
+ my $foo = [];
-is_deeply($foo, [1], "got the right thing");
+ my $code = eval_closure(
+ source => 'sub { push @$bar, @_ }',
+ environment => {
+ '$bar' => \$foo,
+ },
+ name => 'test',
+ );
+ ok($code, "got something");
+
+ $code->(1);
+
+ is_deeply($foo, [1], "got the right thing");
+}
+
+{
+ my $foo = [1, 2, 3];
+
+ my $code = eval_closure(
+ # not sure if strict leaking into evals is intended, i think i remember
+ # it being changed in newer perls
+ source => 'do { no strict; sub { $foo } }',
+ );
+
+ ok($code, "got something");
+
+ ok(!$code->(), "environment is clean");
+}
done_testing;