summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-11-01 11:58:14 -0500
committerJesse Luehrs <doy@tozt.net>2010-11-01 11:58:14 -0500
commit2ed4f9ad667689565e857fbd156b585e206492b9 (patch)
treea08c6cd3372ab7bb88c5c120b5ca83390c71ce80 /t
parentc524c0f377fcac657a8a0f564f362587dfeab70d (diff)
downloadeval-closure-2ed4f9ad667689565e857fbd156b585e206492b9.tar.gz
eval-closure-2ed4f9ad667689565e857fbd156b585e206492b9.zip
todo test for the description/memoize thing
Diffstat (limited to 't')
-rw-r--r--t/05-memoize.t102
1 files changed, 102 insertions, 0 deletions
diff --git a/t/05-memoize.t b/t/05-memoize.t
new file mode 100644
index 0000000..02fd11f
--- /dev/null
+++ b/t/05-memoize.t
@@ -0,0 +1,102 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Fatal;
+use Test::Requires 'Test::Output';
+
+use Eval::Closure;
+
+{
+ 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;