aboutsummaryrefslogblamecommitdiffstats
path: root/testing/lib/Test/Irssi.pm
blob: f4acb718d4f7a4900bb40385e53437970bb5e3fb (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
                 
                    









                               





                                                                       






























                         








                                    
















                                         

































                                                                

                              



                                              






                                                                        


                                      

 
                
 

                                                                 

     
 
 
 


           
 
                                                        



               
use strictures 1;
use MooseX::Declare;

our $VERSION = 0.01;

class Test::Irssi {

    use Term::VT102;
    use Term::Terminfo;
    use feature qw/say switch/;
    use Data::Dump;
    use IO::File;
    use Test::Irssi::Driver;

    # requires the latest pre-release POE from
    # https://github.com/rcaputo/poe until a new release is...released.
    use POE;


    has 'irssi_binary'
      => (
          is => 'ro',
          isa => 'Str',
          required => 1,
         );

    has 'irssi_homedir'
      => (
          is => 'ro',
          isa => 'Str',
          required => 1,
         );

    has 'terminal_width'
      => (
          is => 'ro',
          isa => 'Int',
          required => 1,
          default => 80,
         );

    has 'terminal_height'
      => (
          is => 'ro',
          isa => 'Int',
          required => 1,
          default => 24,
         );

    has 'vt'
      => (
          is => 'ro',
          isa => 'Term::VT102',
          required => 1,
          lazy => 1,
          builder => '_build_vt102',
         );

    has 'logfile'
      => (
          is => 'ro',
          isa => 'Str',
          required => 1,
          default => 'irssi-test.log',
         );

    has '_logfile_fh'
      => (
          is => 'ro',
          isa => 'IO::File',
          required => 1,
          lazy => 1,
          builder => '_build_logfile_fh',
         );

    has '_driver'
      => (
          is => 'ro',
          isa => 'Test::Irssi::Driver',
          required => 1,
          lazy => 1,
          builder => '_build_driver',
         );

    method _build_driver {
        my $drv = Test::Irssi::Driver->new(parent => $self);
        return $drv;
    }

    method _build_vt102 {
        my $rows = $self->terminal_height;
        my $cols = $self->terminal_width;

        my $vt = Term::VT102->new($cols, $rows);

        # options
        $vt->option_set(LINEWRAP => 1);
        $vt->option_set(LFTOCRLF => 1);

        # callbacks
        $vt->callback_set(OUTPUT      => \&vt_output,    undef);
        $vt->callback_set(ROWCHANGE   => \&vt_rowchange, undef);
        $vt->callback_set(CLEAR       => \&vt_clear,     undef);
        $vt->callback_set(SCROLL_DOWN => \&vt_scr_dn,    undef);
        $vt->callback_set(SCROLL_UP   => \&vt_scr_up,    undef);
        $vt->callback_set(GOTO        => \&vt_goto,      undef);

        return $vt;
    }

    method _build_logfile_fh {

        my $logfile = $self->logfile;

        my $fh = IO::File->new($logfile, 'w');
        die "Couldn't open $logfile for writing: $!" unless defined $fh;
        $fh->autoflush(1);

        return $fh;
    }


    method log (Str $msg) {
        $self->_logfile_fh->say($msg);
    }


    method run {

        ### Start a session to encapsulate the previous features.
        $poe_kernel->run();
    }
}



__END__

=head1 NAME

Test::Irssi - A cunning testing system for Irssi scripts

=head1 SYNOPSIS

blah blah blah