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.