Test-Stream
view release on metacpan or search on metacpan
t/modules/Hub.t view on Meta::CPAN
eval { $hub->finalize($dbg) };
is($ran, 1, "ran once");
$hub = undef;
};
tests IPC => sub {
my ($driver) = Test::Stream::IPC->drivers;
is($driver, 'Test::Stream::IPC::Files', "Default Driver");
my $ipc = $driver->new;
my $hub = Test::Stream::Hub->new(
formatter => My::Formatter->new,
ipc => $ipc,
);
my $build_event = sub {
my ($msg) = @_;
return My::Event->new(msg => $msg, debug => 'fake');
};
my $e1 = $build_event->('foo');
my $e2 = $build_event->('bar');
my $e3 = $build_event->('baz');
my $do_send = sub {
$hub->send($e1);
$hub->send($e2);
$hub->send($e3);
};
my $do_check = sub {
my $name = shift;
my $old = $hub->format(My::Formatter->new);
isa_ok($old, 'My::Formatter');
is(
$old,
[$e1, $e2, $e3],
"Formatter got all events ($name)"
);
};
if (CAN_REALLY_FORK) {
my $pid = fork();
die "Could not fork!" unless defined $pid;
if ($pid) {
is(waitpid($pid, 0), $pid, "waited properly");
ok(!$?, "child exited with success");
$hub->cull();
$do_check->('Fork');
}
else {
$do_send->();
exit 0;
}
}
if (CAN_THREAD && $] ge '5.010') {
require threads;
my $thr = threads->new(sub { $do_send->() });
$thr->join;
$hub->cull();
$do_check->('Threads');
}
$do_send->();
$hub->cull();
$do_check->('no IPC');
};
tests listen => sub {
my $hub = Test::Stream::Hub->new();
my @events;
my @counts;
my $it = $hub->listen(sub {
my ($h, $e, $count) = @_;
is($h, $hub, "got hub");
push @events => $e;
push @counts => $count;
});
my $second;
my $it2 = $hub->listen(sub { $second++ });
my $ok1 = Test::Stream::Event::Ok->new(
pass => 1,
name => 'foo',
debug => Test::Stream::DebugInfo->new(
frame => [ __PACKAGE__, __FILE__, __LINE__ ],
),
);
my $ok2 = Test::Stream::Event::Ok->new(
pass => 0,
name => 'bar',
debug => Test::Stream::DebugInfo->new(
frame => [ __PACKAGE__, __FILE__, __LINE__ ],
),
);
my $ok3 = Test::Stream::Event::Ok->new(
pass => 1,
name => 'baz',
debug => Test::Stream::DebugInfo->new(
frame => [ __PACKAGE__, __FILE__, __LINE__ ],
),
);
$hub->send($ok1);
$hub->send($ok2);
$hub->unlisten($it);
$hub->send($ok3);
is(\@counts, [1, 2], "Got counts");
is(\@events, [$ok1, $ok2], "got events");
( run in 1.249 second using v1.01-cache-2.11-cpan-a49fcb8fa48 )