mamawe has asked for the wisdom of the Perl Monks concerning the following question:
Hi all,
The solution I've taken is in my comment further down.
I have a module that contains an interactive script. For this script I would like to write a regression test for the behaviour on EOF of the input (it should exit cleanly with a defined output).
My first idea was, to use IPC::Open2 as written in perlipc. But then I would have to implement some timer to make sure the script exits at all.
My next idea was, to try something with Expect. But I can't see a way to close stdin for the process within Expect.
So that's where I am, any hints/suggestions appreciated.
Mathias
Update. To make it more clear here is some code.
Given this scriptand this testwhile(1) { if (eof(STDIN)) { print "END"; exit; } $_ = <STDIN>; if (/^q/i) { print "END"; exit; } print; print '$ '; }
I get mostly what I want.#!/usr/bin/perl -w # use Test::More tests => 4; use Expect; $script = './test1-script.pl'; @match_pattern = ( [ qr/END/ => sub { print "\n"; ok(1,"got end"); } ] + ); #----------------------- 1 --------------------------- $exp = Expect->spawn($script); $exp->send("q\n"); $exp->expect(10, @match_pattern); #----------------------- 2 --------------------------- $exp = Expect->spawn($script); $exp->send("\4\n"); $exp->expect(10, @match_pattern); #===================================================== use IPC::Open3; #----------------------- 3 --------------------------- $pid = open3($in, $out, $err, $script); print $in "q\n"; like(<$out>,qr/END/,"Quit"); waitpid($pid, 0); #----------------------- 4 --------------------------- $pid = open3($in, $out, $err, $script); close $in; like(<$out>,qr/END/,"EOF in Input"); waitpid($pid, 0);
I see the following problems:
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Testing an interactive script with EOF on input
by roboticus (Chancellor) on Oct 12, 2011 at 10:46 UTC | |
by mamawe (Sexton) on Oct 14, 2011 at 09:35 UTC | |
Re: Testing an interactive script with EOF on input
by mamawe (Sexton) on Oct 30, 2011 at 18:46 UTC |