1use strict; 2use warnings; 3package EventTest; 4use parent qw(Mixin::Event::Dispatch); 5use Test::More; 6 7# Turn on the fallback to on_* event handlers 8use constant EVENT_DISPATCH_ON_FALLBACK => 1; 9 10sub new { bless {}, shift } 11sub test_event_count { shift->{seen_test_event} } 12sub on_test_event { 13 my $self = shift; 14 ++$self->{seen_test_event}; 15} 16sub on_evt_with_parameters { 17 my $self = shift; 18 my %args = @_; 19 $self->invoke_event(parameters => [ %args ]); 20} 21 22package main; 23use Test::More tests => 14; 24 25my $obj = new_ok('EventTest'); 26ok($obj->invoke_event('test_event'), 'can invoke event with method available'); 27is($obj->test_event_count, 1, 'event count correct'); 28my $second = 0; 29ok($obj->add_handler_for_event('second_test' => sub { ++$second; 0 }), 'can add handler for event'); 30is($second, 0, 'count is zero before invoking event'); 31ok($obj->invoke_event('second_test'), 'can invoke event with queued handler'); 32is($second, 1, 'count is 1 after invoking event'); 33is($obj->invoke_event('second_test'), $obj, 'still returns $self when handler no longer present'); 34is($second, 1, 'count is 1 after invoking event again'); 35is($obj->test_event_count, 1, 'event count correct'); 36 37ok($obj->add_handler_for_event(parameters => sub { 38 my $self = shift; 39 my $param_ref = shift; 40 my %param = @$param_ref; 41 is($param{first}, 17, 'first parameter is 17'); 42 is($param{second}, 'test', 'second parameter is test'); 43}), 'add parameters handler'); 44my %hash = ( 45 first => 17, 46 second => 'test' 47); 48ok($obj->invoke_event(evt_with_parameters => %hash), 'invoke with hash'); 49