The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 32;
use strict; use warnings;

## FIXME colorize string then check stripped() ?

BEGIN {
  use_ok('Bot::Cobalt::IRC::Message');
  use_ok('Bot::Cobalt::IRC::Message::Public');
}

my $msg = new_ok( 'Bot::Cobalt::IRC::Message' => [
   src     => 'somebody!somewhere@example.org',
   context => 'Context',
   message => 'Some IRC message',
   targets => [ 'JoeUser' ],
 ]
);
isa_ok( $msg, 'Bot::Cobalt::IRC::Event' );

ok( $msg->src_nick eq 'somebody', 'src_nick()' );
ok( $msg->src_user eq 'somewhere', 'src_user()' );
ok( $msg->src_host eq 'example.org', 'src_host()' );

ok( $msg->context eq 'Context', 'context()' );
ok( $msg->message eq 'Some IRC message', 'message()' );
ok( $msg->target eq 'JoeUser', 'target()');
ok( $msg->stripped eq 'Some IRC message', 'stripped()' );

ok( $msg->targets([ 'Bob', 'Sam' ]), 'Reset targets()' );
ok( $msg->target eq 'Bob', 'target() after reset' );


is_deeply( $msg->message_array,
  [ 'Some', 'IRC', 'message' ],
);

is_deeply( $msg->message_array_sp,
  [ 'Some', 'IRC', 'message' ],
);

ok( $msg->message( 'Changed message' ), 'Reset message()' );

is_deeply( $msg->message_array,
  [ 'Changed', 'message' ],
);

is_deeply( $msg->message_array_sp,
  [ 'Changed', 'message' ],
);

ok( $msg->message( '  Leading spaces'), 'Reset message() again' );

is_deeply( $msg->message_array,
  [ 'Leading', 'spaces' ],
);

is_deeply( $msg->message_array_sp,
  [ '', '', 'Leading', 'spaces' ],
);

undef $msg;

my $pub = new_ok( 'Bot::Cobalt::IRC::Message::Public' => [
    src     => 'somebody!somewhere@example.org',
    context => 'Main',
    message => 'Public IRC message',
    targets => [ '#chan1', '#another' ],
  ]
);

isa_ok( $pub, 'Bot::Cobalt::IRC::Message' );

ok( $pub->channel eq '#chan1', 'channel()' );

my $cmd = new_ok( 'Bot::Cobalt::IRC::Message::Public' => [
    src     => 'somebody!somewhere@example.org',
    context => 'Main',
    message => '!public cmd message',
    targets => [ '#chan1', '#another' ],
  ]
);

ok( $cmd->cmd eq 'public', 'cmd()' );

ok( $cmd->message( 'Not a command'), 'Change message()' );

ok( !$cmd->cmd(), 'cmd() dropped' );

ok( !$cmd->highlight(), 'No highlight()' );

ok( $cmd->myself('Botty'), 'Set myself()' );

ok( $cmd->message( 'Botty: snacks are tasty' ), 
  'Set highlight message()'
);

ok( $cmd->highlight, 'highlight()' );