From: Jesse Luehrs Date: Mon, 1 Nov 2010 16:58:14 +0000 (-0500) Subject: todo test for the description/memoize thing X-Git-Tag: 0.01~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2ed4f9ad667689565e857fbd156b585e206492b9;p=gitmo%2FEval-Closure.git todo test for the description/memoize thing --- 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;