Data-EventStream
view release on metacpan or search on metacpan
t/lib/TestStream.pm view on Meta::CPAN
package TestStream;
use Moose;
use Data::EventStream;
use Test::Most;
has aggregator_class => ( is => 'ro', required => 1 );
has new_params => ( is => 'ro', default => sub { {} } );
has aggregator_params => ( is => 'ro', isa => 'HashRef', required => 1 );
has events => ( is => 'ro', isa => 'ArrayRef', required => 1 );
has time_sub => ( is => 'ro' );
has start_time => ( is => 'ro' );
has expected_time_length => ( is => 'ro' );
has expected_length => ( is => 'ro' );
has no_callbacks => ( is => 'ro', default => 0, );
has filter => ( is => 'ro', );
sub _store_observed_value {
my ( $hr, $key, $value ) = @_;
if ( defined $hr->{$key} ) {
if ( ref $hr->{$key} eq 'ARRAY' ) {
push @{ $hr->{$key} }, $value;
}
else {
$hr->{$key} = [ $hr->{$key}, $value, ];
}
}
else {
$hr->{$key} = $value;
}
}
sub run {
my $test = shift;
my $es = Data::EventStream->new(
( defined $test->start_time ? ( time => $test->start_time ) : () ),
( defined $test->time_sub ? ( time_sub => $test->time_sub ) : () ),
( defined $test->filter ? ( filter => $test->filter ) : () ),
);
my %aggregator;
my %ins;
my %outs;
my %resets;
my $add_aggregator = sub {
my ( $name, $agg_params ) = @_;
$aggregator{$name} = $test->aggregator_class->new( $test->new_params );
$es->add_aggregator(
$aggregator{$name},
%$agg_params,
(
$test->no_callbacks ? () : (
on_enter => sub {
_store_observed_value( \%ins, $name, $_[0]->value );
},
on_leave => sub {
_store_observed_value( \%outs, $name, $_[0]->value );
},
on_reset => sub {
_store_observed_value( \%resets, $name, $_[0]->value );
},
)
( run in 1.591 second using v1.01-cache-2.11-cpan-39bf76dae61 )