The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More 'no_plan';

use ok 'Devel::Events::Generator::ClassPublisher';

use Devel::Events::Handler::Callback;
use Class::Publisher;

{
	package Foo;
	use base qw/Class::Publisher/;

	sub new { bless { }, shift };
}

my $foo = Foo->new;

my @events;

my $gen = Devel::Events::Generator::ClassPublisher->new(
	handler => Devel::Events::Handler::Callback->new(sub { push @events, [@_] })
);

$gen->subscribe( $foo );

$foo->notify_subscribers( oink => foo => 42 );

is_deeply(
	\@events,
	[
		[ oink => ( generator => $gen, publisher => $foo, foo => 42 ) ],
	],
	"event relayed",
);

$gen->unsubscribe( $foo );

$foo->notify_subscribers( boink => bar => "blah" );

is( scalar(@events), 1, "unsubscribe" );