NAME
Test::Mojo::IRC - Module for testing Mojo::IRC
SYNOPSIS
use Test::Mojo::IRC -basic;
my $t = Test::Mojo::IRC->start_server;
my $irc = Mojo::IRC->new(server => $t->server);
# simulate server/client communication
$t->run(
[
# Send "welcome.irc" from the DATA section when client sends "NICK"
qr{\bNICK\b} => [qw(main motd.irc)],
],
sub {
my $err;
my $motd = 0;
$t->on($irc, irc_rpl_motd => sub { $motd++ });
$t->on($irc, irc_rpl_endofmotd => sub { Mojo::IOLoop->stop; }); # need to manually stop the IOLoop
$irc->connect(sub { $err = $_[1]; });
Mojo::IOLoop->start; # need to manually start the IOLoop
is $err, "", "connected";
is $motd, 3, "message of the day";
},
);
done_testing;
__DATA__
@@ motd.irc
:spectral.shadowcat.co.uk 375 test123 :- spectral.shadowcat.co.uk Message of the Day -
:spectral.shadowcat.co.uk 372 test123 :- We scan all connecting clients for open proxies and other
:spectral.shadowcat.co.uk 372 test123 :- exploitable nasties. If you don't wish to be scanned,
:spectral.shadowcat.co.uk 372 test123 :- don't connect again, and sorry for scanning you this time.
:spectral.shadowcat.co.uk 376 test123 :End of /MOTD command.
DESCRIPTION
Test::Mojo::IRC is a module for making it easier to test Mojo::IRC applications.
ENVIRONMENT VARIABLES
TEST_MOJO_IRC_SERVER
TEST_MOJO_IRC_SERVER
can be set to point to a live server. If the variable is set, "start_server" will simply return TEST_MOJO_IRC_SERVER instead of setting up a server.
ATTRIBUTES
server
$str = $self->server;
Returns the server address, "host:port", that "start_server" set up.
welcome_message
$str = $self->welcome_message;
$self = $self->welcome_message($str);
Holds a message which will be sent to the client on connect.
METHODS
on
$self->on($irc, $event, $cb);
Will attach events to the $irc object which is removed after "run" has completed. See "SYNOPSIS" for example code.
run
$self->run($reply_on, sub { my $self = shift });
Used to simulate communication between IRC server and client. The way this works is that the $cb
will initiate connect or write to the server and the server will then respond with the data from either "welcome_message" or $reply_on
on these events.
$reply_on
is an array-ref of regex/buffer pairs. Each time a message from the client match the first regex in the $reply_on
array the buffer will be sent back to the client and the regex/buffer will be removed. This means that the order of the pairs are important. The buffer can be...
Scalar
Plain text.
Scalar ref
Path to file on disk.
Array ref
The module name and file passed on to "data_section" in Mojo::Loader. The default package is "main", meaning the two examples below is the same:
$self->run([qr{JOIN}, ["join-reply.irc"]], sub { my $self = shift }); $self->run([qr{JOIN}, ["main", "join-reply.irc"]], sub { my $self = shift });
Note that starting and stopping the IOLoop is up to you, but there is also a master timeout which will stop the IOLoop if running for too long.
See "SYNOPSIS" for example.
start_server
$server = $self->start_server;
$self = Test::Mojo::IRC->start_server;
Will start a test server and return "server". It can also be called as a class method which will return a new object.
import
use Test::Mojo::IRC -basic;
Loading this module with "-basic" will import strict, warnings, utf8, Test::More and 5.10 features into the caller namespace.
COPYRIGHT AND LICENSE
Copyright (C) 2014, Jan Henning Thorsen
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
AUTHOR
Jan Henning Thorsen - jhthorsen@cpan.org