The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 12;
BEGIN { use_ok('POE') };
BEGIN { use_ok('POE::Component::Server::IRC') };

my $pocosi = POE::Component::Server::IRC->spawn( auth => 0, options => { trace => 0 }, antiflood => 0, plugin_debug => 0, debug => 0 );

if ( $pocosi ) {
	isa_ok( $pocosi, "POE::Component::Server::IRC" );
	POE::Session->create(
		package_states => [ 
			'main' => [ qw( _start 
					_shutdown
					ircd_registered
					ircd_daemon_quit
					ircd_daemon_nick ) ],
		],
		options => { trace => 0 },
		heap => { ircd => $pocosi },
	);
	$poe_kernel->run();
}

exit 0;

sub _start {
  my ($kernel,$heap) = @_[KERNEL,HEAP];
  $heap->{ircd}->yield( 'register' );
  $heap->{ircd}->yield( 'add_spoofed_nick', { nick => 'OperServ', umode => 'o', ircname => 'The OperServ Bot' } );
  $kernel->delay( '_shutdown' => 20 );
  undef;
}

sub _shutdown {
  my $heap = $_[HEAP];
  $_[KERNEL]->delay( '_shutdown' => undef );
  $heap->{ircd}->yield( 'shutdown' );
  delete $heap->{ircd};
  undef;
}

sub ircd_registered {
  my ($heap,$object) = @_[HEAP,ARG0];
  my $backend = $_[SENDER]->get_heap();
  isa_ok( $object, "POE::Component::Server::IRC" );
  isa_ok( $backend, "POE::Component::Server::IRC" );
  undef;
}

sub ircd_daemon_quit {
  pass('Deleted Spoof User');
  $poe_kernel->yield( '_shutdown' );
  undef;
}

sub ircd_daemon_nick {
  my @args = @_[ARG0..$#_];
  ok( $args[0] eq 'OperServ', 'Spoof Test 1: Nick' );
  ok( $args[4] eq 'OperServ', 'Spoof Test 1: User' );
  ok( $args[5] eq 'poco.server.irc', 'Spoof Test 1: Host' );
  ok( $args[6] eq 'poco.server.irc', 'Spoof Test 1: Server' );
  ok( $args[3] eq '+o', 'Spoof Test 1: Umode' );
  ok( $args[7] eq 'The OperServ Bot', 'Spoof Test 1: GECOS' );
  $_[SENDER]->get_heap()->yield( 'del_spoofed_nick', $args[0] );
  undef;
}