Scope-Guard.t   [plain text]


# 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);
}