From 1e6f98e7d399163ac51b0bd10f9f6e1714163016 Mon Sep 17 00:00:00 2001 From: Tom Feist Date: Mon, 21 Feb 2011 00:54:59 +0000 Subject: moved testing into its own dir --- feature-tests/auto-testing.pl | 214 ------------------------------------------ testing/auto-testing.pl | 214 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+), 214 deletions(-) delete mode 100755 feature-tests/auto-testing.pl create mode 100755 testing/auto-testing.pl diff --git a/feature-tests/auto-testing.pl b/feature-tests/auto-testing.pl deleted file mode 100755 index 31a9e5e..0000000 --- a/feature-tests/auto-testing.pl +++ /dev/null @@ -1,214 +0,0 @@ - -package Test::Irssi; - -use warnings; -use strict; - -# for fixed version of P:W:R -use lib $ENV{HOME} . "/projects/poe/lib"; - -sub PROGRAM () { "/opt/stow/repo/irssi-debug/bin/irssi" } - -use POSIX; - -use POE qw( Wheel::ReadWrite Wheel::Run Filter::Stream ); - -use Term::VT102; -use Term::TermInfo; -use feature qw/say switch/; -use Data::Dumper; -use IO::File; - -my $logfile = "irssi.log"; -#open my $logfh, ">", $logfile or die "Couldn't open $logfile for writing: $!"; -my $logfh = IO::File->new($logfile, 'w'); - die "Couldn't open $logfile for writing: $!" unless defined $logfh; -$logfh->autoflush(1); - - -my $ti = Term::Terminfo->new(); - -my $vt = Term::VT102->new(rows => 24, cols => 80); - -$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); - -$vt->option_set(LINEWRAP => 1); -$vt->option_set(LFTOCRLF => 1); - -sub vt_output { - my ($vt, $cb_name, $cb_data, $priv_data) = @_; - say $logfh "OUTPUT: " . Dumper([@_[1..$#_]]); -} - - -sub vt_rowchange { - my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; - #say $logfh "ROWCHANGE: " . Dumper(\@_); - #say $logfh "Row $arg1 changed: "; - #say $logfh $vt->row_plaintext($arg1); - my $bottom_line = $vt->rows(); - say $logfh "-" x 100; - say $logfh "Window Line"; - say $logfh $vt->row_plaintext($bottom_line - 1); - say $logfh "-" x 100; - say $logfh "Prompt line"; - say $logfh $vt->row_plaintext($bottom_line); - say $logfh "-" x 100; - - # -# print $ti->getstr("clear"); - # print vt_dump(); - -} - -sub vt_clear { - my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; - say $logfh "VT Cleared"; -} -sub vt_scr_dn { - my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; - say $logfh "Scroll Down"; -} -sub vt_scr_up { - my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; - say $logfh "Scroll Up"; -} -sub vt_goto { - my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; - say $logfh "Goto: $arg1, $arg2"; -} - -sub vt_dump { - my $str = ''; - for my $y (1..24) { - $str .= $vt->row_sgrtext($y) . "\n"; - } - return $str; -} - -### Handle the _start event. This sets things in motion. -sub handle_start { - my ($kernel, $heap) = @_[KERNEL, HEAP]; - - save_term_settings($heap); - - # Set a signal handler. - $kernel->sig(CHLD => "got_sigchld"); - - make_raw(); - - # Start the terminal reader/writer. - $heap->{stdio} = POE::Wheel::ReadWrite->new( - InputHandle => \*STDIN, - OutputHandle => \*STDOUT, - InputEvent => "got_terminal_stdin", - Filter => POE::Filter::Stream->new(), - ); - - # Start the asynchronous child process. - $heap->{program} = POE::Wheel::Run->new( - Program => PROGRAM, - ProgramArgs => [qw/--noconnect/], - Conduit => "pty", - Winsize => [24, 80, 0, 0], - StdoutEvent => "got_child_stdout", - StdioFilter => POE::Filter::Stream->new(), - ); -} - -### Handle the _stop event. This restores the original terminal -### settings when we're done. That's very important. -sub handle_stop { - my $heap = $_[HEAP]; - $heap->{stdin_tio}->setattr (0, TCSANOW); - $heap->{stdout_tio}->setattr(1, TCSANOW); - $heap->{stderr_tio}->setattr(2, TCSANOW); - - $logfh->close(); -} - -### Handle terminal STDIN. Send it to the background program's STDIN. -### If the user presses ^C, then echo a little string - -sub handle_terminal_stdin { - my ($heap, $input) = @_[HEAP, ARG0]; - if ($input =~ m/\003/g) { - $input = "/echo I like cakes\n"; - } elsif ($input =~ m/\004/g) { - say $logfh vt_dump(); - } - $heap->{program}->put($input); -} -## -### Handle STDOUT from the child program. -sub handle_child_stdout { - my ($heap, $input) = @_[HEAP, ARG0]; - # process via vt - $vt->process($input); - # send to terminal - $heap->{stdio}->put($input); -} - -### Handle SIGCHLD. Shut down if the exiting child process was the -### one we've been managing. - -sub handle_sigchld { - my ($heap, $child_pid) = @_[HEAP, ARG1]; - if ($child_pid == $heap->{program}->PID) { - delete $heap->{program}; - delete $heap->{stdio}; - } - return 0; -} - - -### Start a session to encapsulate the previous features. -POE::Session->create( - inline_states => { - _start => \&handle_start, - _stop => \&handle_stop, - got_terminal_stdin => \&handle_terminal_stdin, - got_child_stdout => \&handle_child_stdout, - got_sigchld => \&handle_sigchld, - }, -); - - -sub make_raw { - - # Put the terminal into raw input mode. Otherwise discrete - # keystrokes will not be read immediately. - my $tio = POSIX::Termios->new(); - $tio->getattr(0); - my $lflag = $tio->getlflag; - $lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | IEXTEN | ISIG); - $tio->setlflag($lflag); - my $iflag = $tio->getiflag; - $iflag &= ~(BRKINT | INPCK | ISTRIP | IXON); - $tio->setiflag($iflag); - my $cflag = $tio->getcflag; - $cflag &= ~(CSIZE | PARENB); - $tio->setcflag($cflag); - $tio->setattr(0, TCSANOW); - -} - -sub save_term_settings { - my ($heap) = @_; - # Save the original terminal settings so they can be restored later. - $heap->{stdin_tio} = POSIX::Termios->new(); - $heap->{stdin_tio}->getattr(0); - $heap->{stdout_tio} = POSIX::Termios->new(); - $heap->{stdout_tio}->getattr(1); - $heap->{stderr_tio} = POSIX::Termios->new(); - $heap->{stderr_tio}->getattr(2); -} - -### Start POE's main loop, which runs the session until it's done. -$poe_kernel->run(); -exit 0; diff --git a/testing/auto-testing.pl b/testing/auto-testing.pl new file mode 100755 index 0000000..31a9e5e --- /dev/null +++ b/testing/auto-testing.pl @@ -0,0 +1,214 @@ + +package Test::Irssi; + +use warnings; +use strict; + +# for fixed version of P:W:R +use lib $ENV{HOME} . "/projects/poe/lib"; + +sub PROGRAM () { "/opt/stow/repo/irssi-debug/bin/irssi" } + +use POSIX; + +use POE qw( Wheel::ReadWrite Wheel::Run Filter::Stream ); + +use Term::VT102; +use Term::TermInfo; +use feature qw/say switch/; +use Data::Dumper; +use IO::File; + +my $logfile = "irssi.log"; +#open my $logfh, ">", $logfile or die "Couldn't open $logfile for writing: $!"; +my $logfh = IO::File->new($logfile, 'w'); + die "Couldn't open $logfile for writing: $!" unless defined $logfh; +$logfh->autoflush(1); + + +my $ti = Term::Terminfo->new(); + +my $vt = Term::VT102->new(rows => 24, cols => 80); + +$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); + +$vt->option_set(LINEWRAP => 1); +$vt->option_set(LFTOCRLF => 1); + +sub vt_output { + my ($vt, $cb_name, $cb_data, $priv_data) = @_; + say $logfh "OUTPUT: " . Dumper([@_[1..$#_]]); +} + + +sub vt_rowchange { + my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; + #say $logfh "ROWCHANGE: " . Dumper(\@_); + #say $logfh "Row $arg1 changed: "; + #say $logfh $vt->row_plaintext($arg1); + my $bottom_line = $vt->rows(); + say $logfh "-" x 100; + say $logfh "Window Line"; + say $logfh $vt->row_plaintext($bottom_line - 1); + say $logfh "-" x 100; + say $logfh "Prompt line"; + say $logfh $vt->row_plaintext($bottom_line); + say $logfh "-" x 100; + + # +# print $ti->getstr("clear"); + # print vt_dump(); + +} + +sub vt_clear { + my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; + say $logfh "VT Cleared"; +} +sub vt_scr_dn { + my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; + say $logfh "Scroll Down"; +} +sub vt_scr_up { + my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; + say $logfh "Scroll Up"; +} +sub vt_goto { + my ($vt, $cb_name, $arg1, $arg2, $priv_data) = @_; + say $logfh "Goto: $arg1, $arg2"; +} + +sub vt_dump { + my $str = ''; + for my $y (1..24) { + $str .= $vt->row_sgrtext($y) . "\n"; + } + return $str; +} + +### Handle the _start event. This sets things in motion. +sub handle_start { + my ($kernel, $heap) = @_[KERNEL, HEAP]; + + save_term_settings($heap); + + # Set a signal handler. + $kernel->sig(CHLD => "got_sigchld"); + + make_raw(); + + # Start the terminal reader/writer. + $heap->{stdio} = POE::Wheel::ReadWrite->new( + InputHandle => \*STDIN, + OutputHandle => \*STDOUT, + InputEvent => "got_terminal_stdin", + Filter => POE::Filter::Stream->new(), + ); + + # Start the asynchronous child process. + $heap->{program} = POE::Wheel::Run->new( + Program => PROGRAM, + ProgramArgs => [qw/--noconnect/], + Conduit => "pty", + Winsize => [24, 80, 0, 0], + StdoutEvent => "got_child_stdout", + StdioFilter => POE::Filter::Stream->new(), + ); +} + +### Handle the _stop event. This restores the original terminal +### settings when we're done. That's very important. +sub handle_stop { + my $heap = $_[HEAP]; + $heap->{stdin_tio}->setattr (0, TCSANOW); + $heap->{stdout_tio}->setattr(1, TCSANOW); + $heap->{stderr_tio}->setattr(2, TCSANOW); + + $logfh->close(); +} + +### Handle terminal STDIN. Send it to the background program's STDIN. +### If the user presses ^C, then echo a little string + +sub handle_terminal_stdin { + my ($heap, $input) = @_[HEAP, ARG0]; + if ($input =~ m/\003/g) { + $input = "/echo I like cakes\n"; + } elsif ($input =~ m/\004/g) { + say $logfh vt_dump(); + } + $heap->{program}->put($input); +} +## +### Handle STDOUT from the child program. +sub handle_child_stdout { + my ($heap, $input) = @_[HEAP, ARG0]; + # process via vt + $vt->process($input); + # send to terminal + $heap->{stdio}->put($input); +} + +### Handle SIGCHLD. Shut down if the exiting child process was the +### one we've been managing. + +sub handle_sigchld { + my ($heap, $child_pid) = @_[HEAP, ARG1]; + if ($child_pid == $heap->{program}->PID) { + delete $heap->{program}; + delete $heap->{stdio}; + } + return 0; +} + + +### Start a session to encapsulate the previous features. +POE::Session->create( + inline_states => { + _start => \&handle_start, + _stop => \&handle_stop, + got_terminal_stdin => \&handle_terminal_stdin, + got_child_stdout => \&handle_child_stdout, + got_sigchld => \&handle_sigchld, + }, +); + + +sub make_raw { + + # Put the terminal into raw input mode. Otherwise discrete + # keystrokes will not be read immediately. + my $tio = POSIX::Termios->new(); + $tio->getattr(0); + my $lflag = $tio->getlflag; + $lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | IEXTEN | ISIG); + $tio->setlflag($lflag); + my $iflag = $tio->getiflag; + $iflag &= ~(BRKINT | INPCK | ISTRIP | IXON); + $tio->setiflag($iflag); + my $cflag = $tio->getcflag; + $cflag &= ~(CSIZE | PARENB); + $tio->setcflag($cflag); + $tio->setattr(0, TCSANOW); + +} + +sub save_term_settings { + my ($heap) = @_; + # Save the original terminal settings so they can be restored later. + $heap->{stdin_tio} = POSIX::Termios->new(); + $heap->{stdin_tio}->getattr(0); + $heap->{stdout_tio} = POSIX::Termios->new(); + $heap->{stdout_tio}->getattr(1); + $heap->{stderr_tio} = POSIX::Termios->new(); + $heap->{stderr_tio}->getattr(2); +} + +### Start POE's main loop, which runs the session until it's done. +$poe_kernel->run(); +exit 0; -- cgit v1.2.3