NAME
Bot::Net::Test - helper for building Bot::Net tests
SYNOPSIS
use strict;
use warnings;
# Make this test script a bot
use Bot::Net::Bot;
use Bot::Net::Mixin::Bot::IRC;
use Bot::Net::Test tests => 20;
# Start the server in class MyBotNet::Server::Main
Bot::Net::Test->start_server('Main');
# Connect the bot in class MyBotNet::Bot::Count
Bot::Net::Test->start_bot('Count');
on bot connected => run {
for ( 1 .. 10 ) {
yield send_to => count => 'something';
}
};
on bot message_to_me => run {
my $event = get ARG0;
my $count_expected = (recall('count') || 0) + 1;
remember count => $count_expected;
is($event->sender_nick, 'count');
is($event->message, $count_expected);
if ($count_expected == 10) {
yield irc => quit => 'Test finished.';
}
};
# Startup this bot
Bot::Net::Test->run_test;
DESCRIPTION
Provides some tools to make testing your bots and servers a little easier. The typical pattern for using this class is to make your test script into a bot or server by implementing whichever set of mixins you need.
You can start orther servers or bots using "start_bot" or "start_server". You can define any states you need to handle for testing. Then, you start that server or bot using "run_test".
Make sure that you tell your bot to shutdown when you're finished with your tests. (For example, for an IRC bot, you can issue a quit
or disconnect
state to the IRC POE component as showin the "SYNOPSIS".)
METHODS
import_extra
Builds a test configuration for your test file.
start_server SERVER
Starts the named server. This server will shutdown when the test bot quits or when "stop_server" is called.
stop_server SERVER
Stops the named server.
start_bot BOT
Starts the named bot. This bot will shutdown when the test bot quits or when "stop_bot" is called.
stop_bot BOT
Stops the named bot.
run_test
Tells the test to setup the bot or server and tell the POE kernel to start the event loop.
POE STATES
on _start
Sets up a timer which kills the whole test if it doesn't receive any messages within 30 seconds.
If you have a test that may run for longer than 30 seconds, make sure your events yield "something_happened":
on bot message_to_me => run {
yield 'something_happened';
# do whatever else you like...
};
on child_reaper
Reaps the child bot and server processes.
on shutdown_unless_something_happened
Clears the "soemthing_happened" flag if set. If not set, it tells the bot and/or server to quit.
on something_happened
Sets the "something_happened" flag.
on [ bot quit, server quit ]
Shutdown any bots and servers that haven't yet been stopped.
AUTHORS
Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
COPYRIGHT AND LICENSE
Copyright 2007 Boomer Consulting, Inc. All Rights Reserved.
This program is free software and may be modified and distributed under the same terms as Perl itself.