File: 06_delays.t

package info (click to toggle)
libpoe-component-syndicator-perl 0.06-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 260 kB
  • sloc: perl: 669; makefile: 2
file content (83 lines) | stat: -rw-r--r-- 1,753 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
71
72
73
74
75
76
77
78
79
80
81
82
83
use strict;
use warnings FATAL => 'all';
use POE;
use Test::More tests => 4;

{
    package MyComponent;

    use strict;
    use warnings FATAL => 'all';
    use POE;
    use Test::More;
    use base 'POE::Component::Syndicator';

    sub spawn {
        my ($package, %args) = @_; 
        my $self = bless \%args, $package;
        $self->_syndicator_init(
            debug         => 1,
            prefix        => 'my_',
            object_states => [
                $self => [qw(shutdown)],
            ],
        );
        return $self;
    }

    sub shutdown {
        my ($self) = $_[OBJECT];
        $self->_syndicator_destroy();
    }
}

my $synd = MyComponent->spawn();

POE::Session->create(
    package_states => [
        main => [qw(
            _start
            my_registered
            my_delay_set
            my_delay_removed
            _shutdown
        )],
    ],
);

$poe_kernel->run();

sub _start {
    $poe_kernel->delay('_shutdown', 60, 'Timed out');
    $synd->yield(register => 'all');
}

sub my_registered {
    my ($heap, $irc) = @_[HEAP, ARG0];

    $heap->{alarm_id} = $irc->delay(['foo', 'bar'], 5);
    ok($heap->{alarm_id}, 'Set alarm');
}

sub my_delay_set {
    my ($heap, $event, $alarm_id) = @_[HEAP, STATE, ARG0];

    is($alarm_id, $heap->{alarm_id}, $_[STATE]);
    my $opts = $synd->delay_remove($alarm_id);
    ok($opts, 'Delay Removed');
}

sub my_delay_removed {
    my ($kernel, $heap, $alarm_id) = @_[KERNEL, HEAP, ARG0];

    is($alarm_id, $heap->{alarm_id}, $_[STATE] );
    $kernel->yield('_shutdown');
}

sub _shutdown {
    my ($kernel, $error) = @_[KERNEL, ARG0];
    fail($error) if defined $error;

    $kernel->alarm_remove_all();
    $kernel->signal($kernel, 'SYNDICATOR_SHUTDOWN');
}