POE-Test-Helpers

 view release on metacpan or  search on metacpan

lib/POE/Test/Helpers/MooseRole.pm  view on Meta::CPAN

use strictures 1;
package POE::Test::Helpers::MooseRole;
BEGIN {
  $POE::Test::Helpers::MooseRole::VERSION = '1.11';
}
# ABSTRACT: A Moose role for POE::Test::Helpers for MooseX::POE

use Carp;
use Test::Deep         qw( cmp_bag bag );
use Test::Deep::NoTest qw( eq_deeply );
use List::AllUtils     qw( none );
use Test::More;
use Moose::Role;
use POE::Session; # for POE variables
use POE::Test::Helpers;

has 'object' => (
    is         => 'ro',
    isa        => 'POE::Test::Helpers',
    lazy_build => 1,
    handles    => [ 'reached_event', 'check_all_counts' ],
);

has 'tests'       => ( is => 'ro', isa => 'HashRef', required => 1         );
has 'params_type' => ( is => 'ro', isa => 'Str',     default  => 'ordered' );

sub _build_object {
    my $self   = shift;
    my $object = POE::Test::Helpers->new(
        run         => sub {1},
        tests       => $self->tests,
        params_type => $self->params_type,
    );
}

before 'STARTALL' => sub {
    my $self  = shift;
    my $class = ref $self;

    $self->reached_event(
        name  => '_start',
        order => 0,
    );

    my $count = 1;
    my @subs_to_override = keys %{ $self->object->{'tests'} };

    foreach my $event (@subs_to_override) {
        $event eq '_start' || $event eq '_stop' and next;

        Moose::Meta::Class->initialize($class)->add_before_method_modifier(
            $event => sub {
                my $self = $_[OBJECT];
                $self->reached_event(
                    name   => $event,
                    order  => $count++,
                    params => [ @_[ ARG0 .. $#_ ] ],
                );
            }
        );
    }
};

after 'STOPALL' => sub {
    my $self = shift;
    my $order = $self->object->{'events_order'}             ?
                scalar @{ $self->object->{'events_order'} } :
                0;

    $self->reached_event(
        name  => '_stop',
        order => $order,
    );

    $self->check_all_counts;
};

no Moose::Role;
1;



=pod



( run in 1.432 second using v1.01-cache-2.11-cpan-99c4e6809bf )