-
Notifications
You must be signed in to change notification settings - Fork 26
/
steinert-signal-integrity.t
58 lines (47 loc) · 1.28 KB
/
steinert-signal-integrity.t
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
#!/usr/bin/perl -w
# $Id$
# vim: filetype=perl
# Jonathan Steinert produced a patch to fix POE::Wheel destruction
# timing, and possibly other things, when they're passed as arguments
# to an event handler. It didn't take into consideration a subtle and
# obscure aspect of recursive signal dispatch. This regression test
# makes sure nested signal dispatches receive the proper parameters.
use strict;
sub POE::Kernel::TRACE_DEFAULT () { 1 }
sub POE::Kernel::ASSERT_DEFAULT () { 1 }
sub POE::Kernel::TRACE_FILENAME () { "./test-output.err" }
use POE;
use POE::Wheel::ReadWrite;
use POE::Pipe::OneWay;
use Test::More tests => 2;
my $session_count = 0;
sub start_session {
$session_count++;
POE::Session->create(
inline_states => {
_start => \&setup,
got_signal => \&handle_signal,
_stop => sub { },
timed_out => \&timed_out,
}
);
}
start_session();
$poe_kernel->signal($poe_kernel, MOO => 99);
POE::Kernel->run();
exit;
sub setup {
start_session() if $session_count < 2;
$_[KERNEL]->sig(MOO => "got_signal");
$_[KERNEL]->delay(timed_out => 2);
}
sub handle_signal {
ok(
($_[ARG0] eq "MOO") &&
($_[ARG1] == 99),
"signal parameters: ('$_[ARG0]' eq 'MOO', $_[ARG1] == 99)"
);
}
sub timed_out {
$_[KERNEL]->sig(MOO => undef);
}