# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Scope-Guard.t'
use blib;
use strict;
use warnings;
use Test::More tests => 8;
BEGIN { use_ok('Scope::Guard') };
my $i = 1;
{
my $sg = Scope::Guard->new(sub { ok($i++ == 1, 'handler invoked at scope end') });
}
sub {
my $sg = Scope::Guard->new(sub { ok($i++ == 2, 'handler invoked on return') });
return;
}->();
eval {
my $sg = Scope::Guard->new(sub { ok($i++ == 3, 'handler invoked on exception') });
my $j = 0;
my $k = $j / $j;
};
like($@, qr{^Illegal division by zero}, 'exception was raised');
{
my $sg = Scope::Guard->new(sub { ++$i });
$sg->dismiss();
}
ok($i++ == 4, 'dismiss() disables handler');
{
my $sg = Scope::Guard->new(sub { ++$i });
$sg->dismiss(1);
}
ok($i++ == 5, 'dismiss(1) disables handler');
{
my $sg = Scope::Guard->new(sub { ok($i++ == 6, 'dismiss(0) enables handler') });
$sg->dismiss();
$sg->dismiss(0);
}