diff options
Diffstat (limited to 't/01-basic.t')
-rw-r--r-- | t/01-basic.t | 48 |
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; |