#!/usr/bin/perl use strict; use warnings; use Test::More 'no_plan'; use Callback::Cleanup; can_ok("Callback::Cleanup", "new"); { my ( $callback, $cleanup ) = ( 0, 0 ); my $c = Callback::Cleanup->new( sub { $callback++ }, sub { $cleanup++ } ); is( $callback, 0, "callback not triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 1, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 2, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); undef $c; is( $callback, 2, "callback not triggered" ); is( $cleanup, 1, "cleanup triggered" ); } { my ( $callback, $cleanup ) = ( 0, 0 ); my $c = callback { $callback++; } cleanup { $cleanup++; }; is( $callback, 0, "callback not triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 1, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 2, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); undef $c; is( $callback, 2, "callback not triggered" ); is( $cleanup, 1, "cleanup triggered" ); } { my ( $callback, $cleanup ) = ( 0, 0 ); my $c = cleanup { $cleanup++; } sub { $callback++; }; is( $callback, 0, "callback not triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 1, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 2, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); undef $c; is( $callback, 2, "callback not triggered" ); is( $cleanup, 1, "cleanup triggered" ); } { our ( $callback, $cleanup ) = ( 0, 0 ); my $c = cleanup { $cleanup++ } sub { $callback++; }; is( $callback, 0, "callback not triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 1, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); $c->(); is( $callback, 2, "callback triggered" ); is( $cleanup, 0, "cleanup not triggered" ); undef $c; is( $callback, 2, "callback not triggered" ); is( $cleanup, 1, "cleanup triggered" ); }