Scope-Escape-Sugar

 view release on metacpan or  search on metacpan

t/catch.t  view on Meta::CPAN

use warnings;
use strict;

use Test::More tests => 56;

use Scope::Escape::Sugar qw(catch throw);

my(@events, @value);

sub bb() {
	push @events, [ "bb0" ];
	push @events, [ "bb1a", throw("wibble", "bb2b", "bb2c"), "bb1d" ];
	push @events, [ "bb2" ];
	("bb3a", "bb3b");
}

@events = ();
@value = sub {
	push @events, [ "aa0" ];
	catch "wibble";
	push @events, [ "aa1" ];
	push @events, [ "aa2a", bb(), "aa2b" ];
	push @events, [ "aa3" ];
	("aa4a", "aa4b");
}->();
push @events, [ "cc0", [@value] ];
is_deeply \@events, [
	[ "aa0" ],
	[ "aa1" ],
	[ "bb0" ],
	[ "cc0", [ "bb2b", "bb2c" ] ],
];

@events = ();
@value = sub {
	push @events, [ "aa0" ];
	catch "wibble" {
		push @events, [ "aa1" ];
		push @events, [ "aa2a", bb(), "aa2b" ];
		push @events, [ "aa3" ];
		("aa4a", "aa4b");
	}
}->();
push @events, [ "cc0", [@value] ];
is_deeply \@events, [
	[ "aa0" ],
	[ "aa1" ],
	[ "bb0" ],
	[ "cc0", [ "bb2b", "bb2c" ] ],
];

@events = ();
@value = sub {
	push @events, [ "aa0" ];
	@value = catch("wibble" {
		push @events, [ "aa1" ];
		push @events, [ "aa2a", bb(), "aa2b" ];
		push @events, [ "aa3" ];
		("aa4a", "aa4b");
	});
	push @events, [ "aa5", [@value] ];
	("aa6a", "aa6b");
}->();
push @events, [ "cc0", [@value] ];
is_deeply \@events, [
	[ "aa0" ],
	[ "aa1" ],
	[ "bb0" ],
	[ "aa5", [ "bb2b", "bb2c" ] ],
	[ "cc0", [ "aa6a", "aa6b" ] ],



( run in 1.614 second using v1.01-cache-2.11-cpan-800906f7e73 )