The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use lib 'inc';
use IO::Catch;

use File::Temp qw( tempfile );
use vars qw($_STDOUT_ $_STDERR_);

# pre-5.8.0's warns aren't caught by a tied STDERR.
tie *STDOUT, 'IO::Catch', '_STDOUT_' or die $!;
tie *STDERR, 'IO::Catch', '_STDERR_' or die $!;

use Test::More tests => 7;

# Disable all ReadLine functionality
$ENV{PERL_RL} = 0;

use_ok('WWW::Mechanize::Shell');

sub command_ok {
  my ($command,$expected,$name) = @_;
  my $s = WWW::Mechanize::Shell->new( 'test', rcfile => undef, warnings => undef );
  $s->agent->get("file:t/17-eval-multiline.t");
  eval { $s->cmd($command) };
  is($@,"","$name does not crash")
      or diag "Crash on '$command'";
  is($_STDERR_,undef,"$name produces no warnings");
  is($_STDOUT_,$expected,"$name produces the desired output")
      or diag "Command: '$command'";
  undef $_STDOUT_;
  undef $_STDERR_;
};

command_ok('eval "Hello",
 " World"', "Hello World\n","Multiline eval");
command_ok('eval "Hello from ",
 $self->agent->uri || ""', "Hello from file:t/17-eval-multiline.t\n","Multiline eval substitution");