#!/usr/bin/env perl
use strict;
use Test::More;
my $mem_cycle = eval { require Test::Memory::Cycle } || 0;
my $num_objs = 10;
plan tests => 10*$num_objs + $mem_cycle *2;
{
package Counter;
use MooseX::POE;
has count => (
isa => 'Int',
is => 'rw',
lazy => 1,
default => sub { 1 },
);
has foo => (
is => 'rw'
);
sub START {
my ($self, $kernel, $session) = @_[OBJECT, KERNEL, SESSION];
::pass('Starting ');
::isa_ok($kernel, "POE::Kernel", "kernel in START");
::isa_ok($session, "POE::Session", "session in START");
::is($self->foo, 1, "foo attribute has correct value");
$self->yield('dec');
}
event inc => sub {
my ($self) = $_[OBJECT];
::pass( $self . ':' . $self->count );
$self->count( $self->count + 1 );
return if 3 < $self->count;
$self->yield('inc');
};
sub on_dec {
my ($self) = $_[OBJECT];
::pass( $self . ':' . $self->count );
$self->count($self->count - 1 );
$self->yield('inc');
}
sub STOP {
::pass('Stopping');
}
no MooseX::POE;
}
my @objs = map { Counter->new(foo => 1) } ( 1 .. $num_objs );# .. 10 );
Test::Memory::Cycle::memory_cycle_ok(\@objs, "no memory cycles") if $mem_cycle;
POE::Kernel->run();
Test::Memory::Cycle::memory_cycle_ok(\@objs, "no memory cycles") if $mem_cycle;