File: 01_simple_events.t

package info (click to toggle)
libobject-event-perl 1.230-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, forky, sid, trixie
  • size: 240 kB
  • sloc: perl: 1,099; makefile: 8
file content (70 lines) | stat: -rw-r--r-- 1,701 bytes parent folder | download | duplicates (3)
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');