diff options
Diffstat (limited to 't/memoize.t')
-rw-r--r-- | t/memoize.t | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/t/memoize.t b/t/memoize.t new file mode 100644 index 0000000..b012596 --- /dev/null +++ b/t/memoize.t @@ -0,0 +1,108 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use Test::Fatal; +use Test::Requires 'Test::Output'; + +use Eval::Closure; + +# XXX this whole test isn't very useful anymore, since we no longer do +# memoization. it would be nice to bring it back at some point though, if there +# was a way to do this without breaking the other tests + +plan skip_all => "disabling this test for now"; + +{ + my $source = 'BEGIN { warn "foo\n" } sub { $foo * 2 }'; + + my $code; + my $bar = 15; + stderr_is { + $code = eval_closure( + source => $source, + environment => { + '$foo' => \$bar, + }, + ); + } "foo\n", "BEGIN was run"; + + is($code->(), 30, "got the right sub"); + + my $code2; + my $baz = 8; + stderr_is { + $code2 = eval_closure( + source => $source, + environment => { + '$foo' => \$baz, + }, + ); + } '', "BEGIN was not run twice"; + + is($code2->(), 16, "got the right sub"); +} + +{ + my $source = 'BEGIN { warn "bar\n" } sub { $bar * 2 }'; + + my $code; + my $foo = 60; + stderr_is { + $code = eval_closure( + source => $source, + environment => { + '$bar' => \$foo, + }, + description => 'foo', + ); + } "bar\n", "BEGIN was run"; + + is($code->(), 120, "got the right sub"); + + my $code2; + my $baz = 23; + { local $TODO = "description breaks memoization"; + stderr_is { + $code2 = eval_closure( + source => $source, + environment => { + '$bar' => \$baz, + }, + description => 'baz', + ); + } '', "BEGIN was not run twice"; + } + + is($code2->(), 46, "got the right sub"); +} + +{ + my $source = 'BEGIN { warn "baz\n" } sub { Carp::confess "baz" }'; + + my $code; + stderr_is { + $code = eval_closure( + source => $source, + description => 'first', + ); + } "baz\n", "BEGIN was run"; + + like(exception { $code->() }, qr/baz at first line 1/, + "got the right description"); + + my $code2; + { local $TODO = "description breaks memoization"; + stderr_is { + $code2 = eval_closure( + source => $source, + description => 'second', + ); + } '', "BEGIN was not run twice"; + } + + like(exception { $code2->() }, qr/baz at second line 1/, + "got the right description"); +} + +done_testing; |