package main; use Test::More qw[no_plan]; BEGIN { use_ok( 'POE', 'Session::MultiDispatch' ); } my $session = POE::Session::MultiDispatch->create( inline_states => { _start => \&_start, }, package_states => [ One => [ qw[_start count] ], ], object_states => [ Two->new, [ qw[_start count] ], ], ); isa_ok( $session, 'POE::Session::MultiDispatch' ); sub _start { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; isa_ok( $session, 'POE::Session::MultiDispatch', 'state main::_start session' ); $heap->{count} = 0; $kernel->yield( 'count' ); } package One; use Test::More; use POE; sub _start { my ($session) = $_[SESSION]; isa_ok( $session, 'POE::Session::MultiDispatch', 'state One::_start session' ); ok( $session->swap( count => qw[One Two] ), 'swap successful' ); } sub count { my ($heap) = $_[HEAP]; $heap->{count} -= 1; is( $heap->{count}, 1, 'One::count called second' ); } package Two; use Test::More; use POE; sub new { return bless { }, shift } sub _start { my ($session,$object) = @_[SESSION,OBJECT]; isa_ok( $session, 'POE::Session::MultiDispatch', 'state Two::_start session' ); isa_ok( $object, 'Two' ); } sub count { my ($heap) = $_[HEAP]; $heap->{count} += 2; is( $heap->{count}, 2, 'Two->count called first' ); } package main; $poe_kernel->run; exit(0);