Test::Mojo::IRC - Module for testing Mojo::IRC


  use Test::Mojo::IRC -basic;

  my $t   = Test::Mojo::IRC->start_server;
  my $irc = Mojo::IRC->new(server => $t->server);

  # simulate server/client communication
      # 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";


  @@ motd.irc 375 test123 :- Message of the Day - 372 test123 :- We scan all connecting clients for open proxies and other 372 test123 :- exploitable nasties. If you don't wish to be scanned, 372 test123 :- don't connect again, and sorry for scanning you this time. 376 test123 :End of /MOTD command.


Test::Mojo::IRC is a module for making it easier to test Mojo::IRC applications.



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.



  $str = $self->server;

Returns the server address, "host:port", that "start_server" set up.


  $str = $self->welcome_message;
  $self = $self->welcome_message($str);

Holds a message which will be sent to the client on connect.



  $self->on($irc, $event, $cb);

Will attach events to the $irc object which is removed after "run" has completed. See "SYNOPSIS" for example code.


  $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.


  $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.


  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 (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.


Jan Henning Thorsen -