From: Peter Rabbitson Date: Thu, 28 Apr 2011 11:41:49 +0000 (+0200) Subject: Test context/RV of try/catch/finally blocks X-Git-Tag: Try-Tiny-0.11~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f115dfa62a51780e2d9814813a6d3ff930b43d08;p=p5sagit%2FTry-Tiny.git Test context/RV of try/catch/finally blocks --- diff --git a/t/context.t b/t/context.t new file mode 100644 index 0000000..e2f25b8 --- /dev/null +++ b/t/context.t @@ -0,0 +1,66 @@ +use strict; +use warnings; + +use Test::More; + +BEGIN { + plan tests => + 1 # use_ok + + (4+1) * 2 # list/scalar with exception (try + catch + 2 x finally) + is_deeply + + 4 # void with exception + + (3+1) * 2 # list/scalar no exception (try + 2 x finally) + is_deeply + + 3 # void no exception + ; + + use_ok 'Try::Tiny'; +} + +my $ctx_index = { + VOID => undef, + LIST => 1, + SCALAR => '', +}; +my ($ctx, $die); + +for (sort keys %$ctx_index) { + $ctx = $_; + for (0,1) { + $die = $_; + if ($ctx_index->{$ctx}) { + is_deeply( + [ run() ], + [ $die ? 'catch' : 'try' ], + ); + } + elsif (defined $ctx_index->{$ctx}) { + is_deeply( + [ scalar run() ], + [ $die ? 'catch' : 'try' ], + ); + } + else { + run(); + 1; + } + } +} + +sub run { + try { + is (wantarray, $ctx_index->{$ctx}, "Proper context $ctx in try{}"); + die if $die; + return 'try'; + } + catch { + is (wantarray, $ctx_index->{$ctx}, "Proper context $ctx in catch{}"); + return 'catch'; + } + finally { + is (wantarray, undef, "Proper VOID context in finally{} 1"); + return 'finally'; + } + finally { + is (wantarray, undef, "Proper VOID context in finally{} 2"); + return 'finally'; + }; +}