1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#!perl
use Test::More tests => 10;
package foo;
use common::sense;
use Object::Event;
$Object::Event::ENABLE_METHODS_DEFAULT = $ENV{OE_METHODS_ENABLE};
our @ISA = qw/Object::Event/;
package main;
use common::sense;
my $f = foo->new;
my $cnt = 0;
my @cnt = ();
my $called = 0;
my $called_after = 0;
my $called_before = 0;
my $guard = $f->reg_cb (
before_test => sub { $called_before += $_[1] },
test => sub { $cnt[$cnt++] = 'first'; $called += $_[1] },
test => sub { $cnt[$cnt++] = 'second'; $called -= ($_[1] / 2) },
after_test => sub { $called_after += $_[1] },
);
$f->event (test => 10);
undef $guard;
$f->event (test => 20);
is ($called, 5, "the two main event callbacks were called");
is ($cnt[0], 'first', "the first event callback was called first");
is ($cnt[1], 'second', "the second event callback was called first");
is ($called_after, 10, "main after event callback was called");
is ($called_before, 10, "main before event callback was called");
my $cb = sub { $called++ };
$f->reg_cb (hit_me => $cb);
$f->event('hit_me');
is($called, 6, 'Hit me was called');
$f->unreg_cb ($cb);
$f->event ('hit_me');
is($called, 6, 'Hit me was unregistered correctly');
my $died;
$f->set_exception_cb (sub {
$died++;
});
$f->reg_cb (zombie => sub { die "And we are done, " });
$f->event ('zombie');
is ($died, 1, 'Exception callback was called');
$f->set_exception_cb (undef);
$SIG{__WARN__} = sub { $died = $_[0] };
$f->event ('zombie');
like ($died, qr/unhandled callback exception/, 'Exception generated a warning');
$f->remove_all_callbacks;
$called = 0;
$f->event ('hit_me');
is ($called, 0, 'No more registered events');
|