# Tests for event related code. See code block labeled "Event fun"
use warnings;
use strict;
use POE;
use Data::Dumper;
use Test::More tests => 20;
use_ok('POE::API::Peek');
my $api = POE::API::Peek->new();
POE::Session->create(
inline_states => {
_start => \&_start,
_stop => \&_stop,
dummy => sub {},
},
heap => { api => $api },
);
POE::Kernel->run();
###############################################
sub _start {
my $sess = $_[SESSION];
my $api = $_[HEAP]->{api};
# event_count_to {{{
my $to_count;
eval { $to_count = $api->event_count_to() };
ok(!$@, "event_count_to() causes no exceptions");
is($to_count, 0, 'event_count_to() returns proper count');
POE::Session->create(
inline_states => {
_start => sub {
my $new_to_count;
eval { $new_to_count = $api->event_count_to($sess) };
ok(!$@, "event_count_to(session) causes no exceptions");
is($new_to_count, $to_count, 'event_count_to(session) returns proper count');
eval { $new_to_count = $api->event_count_to($sess->ID) };
ok(!$@, "event_count_to(ID) causes no exceptions");
is($new_to_count, $to_count, 'event_count_to(ID) returns proper count');
},
_stop => sub {}
}
);
# }}}
# event_count_from {{{
my $from_count;
eval { $from_count = $api->event_count_from() };
ok(!$@, "event_count_from() causes no exceptions");
is($from_count, 0, 'event_count_from() returns proper count');
POE::Session->create(
inline_states => {
_start => sub {
my $new_from_count;
eval { $new_from_count = $api->event_count_from($sess) };
ok(!$@, "event_count_from(session) causes no exceptions");
is($new_from_count, $from_count, 'event_count_from(session) returns proper count');
eval { $new_from_count = $api->event_count_from($sess->ID) };
ok(!$@, "event_count_from(ID) causes no exceptions");
is($new_from_count, $from_count, 'event_count_from(ID) returns proper count');
},
_stop => sub {}
}
);
# }}}
# event_queue {{{
my $queue;
eval { $queue = $api->event_queue() };
ok(!$@, "event_queue() causes no exceptions");
# work around a bug in pre 0.04 releases of POE::XS::Queue::Array.
if( ($queue->isa('POE::Queue')) or ($queue->isa('POE::XS::Queue::Array')) ) {
pass('event_queue() returns POE::Queue object');
} else {
fail('event_queue() returns POE::Queue object');
}
# }}}
# event_queue_dump {{{
my $ver = $POE::VERSION;
$ver =~ s/_.+$//;
if($ver >= '0.31') {
$_[KERNEL]->yield('dummy');
my @queue;
eval { @queue = $api->event_queue_dump() };
ok(!$@, "event_queue_dump() causes no exceptions: $@");
# 3 = GC the temp sessions (2) + our dummy
is(scalar @queue, 3, "event_queue_dump() returns the right number of items");
my $item = $queue[-1];
is($item->{type}, 'User', 'event_queue_dump() item has proper type');
is($item->{event}, 'dummy', 'event_queue_dump() item has proper event name');
is($item->{source}, $item->{destination}, 'event_queue_dump() item has proper source and destination');
} else {
my @queue;
eval { @queue = $api->event_queue_dump() };
ok(!$@, "event_queue_dump() causes no exceptions: $@");
is(scalar @queue, 1, "event_queue_dump() returns the right number of items");
my $item = $queue[0];
is($item->{type}, '_sigchld_poll', 'event_queue_dump() item has proper type');
is($item->{event}, '_sigchld_poll', 'event_queue_dump() item has proper event name');
is($item->{source}, $item->{destination}, 'event_queue_dump() item has proper source and destination');
}
# }}}
}
sub _stop {
}