}
} else {
my %plan = @_;
- $n = $plan{tests};
+ $n = $plan{tests};
}
print STDOUT "1..$n\n" unless $noplan;
$planned = $n;
}
}
-# Use this instead of "print STDERR" when outputing failure diagnostic
+# Use this instead of "print STDERR" when outputing failure diagnostic
# messages
sub _diag {
return unless @_;
- my @mess = map { /^#/ ? "$_\n" : "# $_\n" }
+ my @mess = map { /^#/ ? "$_\n" : "# $_\n" }
map { split /\n/ } @_;
my $fh = $TODO ? *STDOUT : *STDERR;
print $fh @mess;
my ($ra, $rb) = @_;
return 0 unless $#$ra == $#$rb;
for my $i (0..$#$ra) {
- next if !defined $ra->[$i] && !defined $rb->[$i];
+ next if !defined $ra->[$i] && !defined $rb->[$i];
return 0 if !defined $ra->[$i];
return 0 if !defined $rb->[$i];
return 0 unless $ra->[$i] eq $rb->[$i];
$fail = 1;
}
} else {
- print STDOUT "# key ", _qq($key), " is ", _qq($value),
+ print STDOUT "# key ", _qq($key), " is ", _qq($value),
", not in original.\n";
$fail = 1;
}
die "test.pl:runperl() does not take a hashref"
if ref $_[0] and ref $_[0] eq 'HASH';
my $runperl = &_create_runperl;
- my $result = `$runperl`;
+ my $result;
+
+ my $tainted = ${^TAINT};
+ my %args = @_;
+ exists $args{switches} && grep m/^-T$/, @{$args{switches}} and $tainted++;
+
+ if ($tainted) {
+ # We will assume that if you're running under -T, you really mean to
+ # run a fresh perl, so we'll brute force launder everything for you
+ my $sep;
+
+ eval "require Config; Config->import";
+ if ($@) {
+ warn "test.pl had problems loading Config: $@";
+ $sep = ':';
+ } else {
+ $sep = $Config{path_sep};
+ }
+
+ my @keys = grep {exists $ENV{$_}} qw(CDPATH IFS ENV BASH_ENV);
+ local @ENV{@keys} = ();
+ # Untaint, plus take out . and empty string:
+ $ENV{PATH} =~ /(.*)/s;
+ local $ENV{PATH} =
+ join $sep, grep { $_ ne "" and $_ ne "." and
+ ($is_mswin or !(stat && (stat _)[2]&0022)) }
+ split quotemeta ($sep), $1;
+
+ $runperl =~ /(.*)/s;
+ $runperl = $1;
+
+ $result = `$runperl`;
+ } else {
+ $result = `$runperl`;
+ }
$result =~ s/\n\n/\n/ if $is_vms; # XXX pipes sometimes double these
return $result;
}
sub which_perl {
unless (defined $Perl) {
$Perl = $^X;
-
+
# VMS should have 'perl' aliased properly
return $Perl if $^O eq 'VMS';
$exe = $Config{_exe};
}
$exe = '' unless defined $exe;
-
+
# This doesn't absolutize the path: beware of future chdirs().
# We could do File::Spec->abs2rel() but that does getcwd()s,
# which is a bit heavyweight to do here.
-
+
if ($Perl =~ /^perl\Q$exe\E$/i) {
my $perl = "perl$exe";
eval "require File::Spec";
}
warn "which_perl: cannot find $Perl from $^X" unless -f $Perl;
-
+
# For subcommands to use.
$ENV{PERLEXE} = $Perl;
}
if( $^O eq 'VMS' ) {
$prog =~ s#/dev/null#NL:#;
- # VMS file locking
+ # VMS file locking
$prog =~ s{if \(-e _ and -f _ and -r _\)}
{if (-e _ and -f _)}
}
}
my $name;
- $name = @methods == 1 ? "$class->can('$methods[0]')"
+ $name = @methods == 1 ? "$class->can('$methods[0]')"
: "$class->can(...)";
-
+
_ok( !@nok, _where(), $name );
}