From b6800926e4030bbaf8f4b22cba1727acaf7da13e Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 19 Jun 2011 19:10:51 +0200 Subject: In TestInit.pm, move the default chdir and @INC code into import(). The behaviour is consistent with previous behaviour, as the equivalent of the new code used to be run at the top level, hence would happen (unconditionally) before import() was called. --- TestInit.pm | 64 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'TestInit.pm') diff --git a/TestInit.pm b/TestInit.pm index 7c24da46e6..88c3ba1849 100644 --- a/TestInit.pm +++ b/TestInit.pm @@ -53,35 +53,18 @@ sub set_opt { } } -my @up_2_t = ('../../lib', '../../t'); -# This is incompatible with the import options. -if (-f 't/TEST' && -f 'MANIFEST' && -d 'lib' && -d 'ext') { - # We're being run from the top level. Try to change directory, and set - # things up correctly. This is a 90% solution, but for hand-running tests, - # that's good enough - if ($0 =~ s!^((?:ext|dist|cpan)[\\/][^\\/]+)[\//](.*\.t)$!$2!) { - # Looks like a test in ext. - chdir $1 or die "Can't chdir '$1': $!"; - new_inc(@up_2_t); - set_opt(@up_2_t); - $^X =~ s!^\.([/\\])!..$1..$1!; - } else { - chdir 't' or die "Can't chdir 't': $!"; - new_inc('../lib'); - set_opt('../lib') if $0 =~ m!^lib/!; - } -} else { - new_inc('../lib'); -} - sub import { my $self = shift; - my $abs; + my @up_2_t = ('../../lib', '../../t'); + my @new_inc; + my ($abs, $chdir, $setopt); foreach (@_) { if ($_ eq 'U2T') { @new_inc = @up_2_t; + $setopt = 1; } elsif ($_ eq 'U1') { @new_inc = '../lib'; + $setopt = 1; } elsif ($_ eq 'NC') { delete $ENV{PERL_CORE} } elsif ($_ eq 'A') { @@ -91,10 +74,37 @@ sub import { } } - if ($abs) { - if(!@new_inc) { + # Need to default. This behaviour is consistent with previous behaviour, + # as the equivalent of this code used to be run at the top level, hence + # would happen (unconditionally) before import() was called. + unless (@new_inc) { + if (-f 't/TEST' && -f 'MANIFEST' && -d 'lib' && -d 'ext') { + # We're being run from the top level. Try to change directory, and + # set things up correctly. This is a 90% solution, but for + # hand-running tests, that's good enough + if ($0 =~ s!^((?:ext|dist|cpan)[\\/][^\\/]+)[\//](.*\.t)$!$2!) { + # Looks like a test in ext. + $chdir = $1; + @new_inc = @up_2_t; + $setopt = 1; + $^X =~ s!^\.([/\\])!..$1..$1!; + } else { + $chdir = 't'; + @new_inc = '../lib'; + $setopt = $0 =~ m!^lib/!; + } + } else { + # (likely) we're being run by t/TEST or t/harness, and we're a test + # in t/ @new_inc = '../lib'; } + } + + if (defined $chdir) { + chdir $chdir or die "Can't chdir '$chdir': $!"; + } + + if ($abs) { @INC = @new_inc; require File::Spec::Functions; # Forcibly untaint this. @@ -103,10 +113,8 @@ sub import { $^X = File::Spec::Functions::rel2abs($^X); } - if (@new_inc) { - new_inc(@new_inc); - set_opt(@new_inc); - } + new_inc(@new_inc); + set_opt(@new_inc) if $setopt; } $0 =~ s/\.dp$//; # for the test.deparse make target -- cgit v1.2.1