Blob Blame History Raw
#!/usr/bin/perl -w
use strict;
use Config;
use Test::More;
use constant NO_SUCH_CMD => "this_command_had_better_not_exist_either";
use constant NOT_AN_EXE  => "not_an_exe.txt";

plan tests => 14;

# We want to invoke our sub-commands using Perl.

my $perl_path = $Config{perlpath};

if ($^O ne 'VMS') {
	$perl_path .= $Config{_exe}
		unless $perl_path =~ m/$Config{_exe}$/i;
}

use_ok("IPC::System::Simple","capture");
chdir("t");

# The tests below for $/ are left in, even though IPC::System::Simple
# never touches $/

# Scalar capture

my $output = capture($perl_path,"output.pl",0);
ok(1);

is($output,"Hello\nGoodbye\n","Scalar capture");
is($/,"\n",'$/ intact');

# List capture

my @output = capture($perl_path,"output.pl",0);
ok(1);

is_deeply(\@output,["Hello\n", "Goodbye\n"],"List capture");
is($/,"\n",'$/ intact');

# List capture with odd $/

{
	local $/ = "e";
	my @odd_output = capture($perl_path,"output.pl",0);
	ok(1);

	is_deeply(\@odd_output,["He","llo\nGoodbye","\n"], 'Odd $/ capture');

}

my $no_output;
eval {
        $no_output = capture(NO_SUCH_CMD,1);
};

like($@,qr/failed to start/, "failed capture");
is($no_output,undef, "No output from failed command");

# Running Perl -v

my $perl_output = capture($perl_path,"-v");
like($perl_output, qr{Larry Wall}, "perl -v contains Larry");

SKIP: {

	# Considering making these tests depend upon the OS,
	# as well as $ENV{AUTHOR_TEST}, since different systems
	# will have different ways of expressing their displeasure
	# at executing a file that's not executable.

	skip('Author test.  Set $ENV{TEST_AUTHOR} to true to run', 2)
		unless $ENV{TEST_AUTHOR};

	chmod(0,NOT_AN_EXE);
	eval { capture(NOT_AN_EXE,1); };
        chmod(0644,NOT_AN_EXE);             # To stop git complaining

	like($@, qr{Permission denied|No such file|The system cannot find the file specified}, "Permission denied on non-exe" );
	like($@, qr{failed to start}, "Non-exe failed to start" );

}