#!./perl # We suppose that perl _mostly_ works at this moment, so may use # sophisticated testing. BEGIN { chdir 't' if -d 't'; @INC = '../lib'; # pick up only this build's lib $ENV{PERL5LIB} = '../lib'; # so children will see it too } my $torture; # torture testing? use Test::Harness; $Test::Harness::switches = ""; # Too much noise otherwise $Test::Harness::verbose = shift if @ARGV && $ARGV[0] eq '-v'; if ($ARGV[0] && $ARGV[0] eq '-torture') { shift; $torture = 1; } # Let tests know they're running in the perl core. Useful for modules # which live dual lives on CPAN. $ENV{PERL_CORE} = 1; #fudge DATA for now. %datahandle = qw( lib/bigint.t 1 lib/bigintpm.t 1 lib/bigfloat.t 1 lib/bigfloatpm.t 1 op/gv.t 1 lib/complex.t 1 lib/ph.t 1 lib/soundex.t 1 op/misc.t 1 op/runlevel.t 1 op/tie.t 1 op/lex_assign.t 1 ); foreach (keys %datahandle) { unlink "$_.t"; } my @tests = (); # [.VMS]TEST.COM calls harness with empty arguments, so clean-up @ARGV @ARGV = grep $_ && length( $_ ) => @ARGV; sub _populate_hash { return map {$_, 1} split /\s+/, $_[0]; } if ($ARGV[0] && $ARGV[0]=~/^-re/) { if ($ARGV[0]!~/=/) { shift; $re=join "|",@ARGV; @ARGV=(); } else { (undef,$re)=split/=/,shift; } } if (@ARGV) { if ($^O eq 'MSWin32') { @tests = map(glob($_),@ARGV); } else { @tests = @ARGV; } } else { unless (@tests) { push @tests, ; push @tests, ; push @tests, ; push @tests, ; push @tests, ; push @tests, ; push @tests, ; push @tests, ; push @tests, if $torture; push @tests, if $^O eq 'MSWin32'; use Config; my %skip; { my %extensions = _populate_hash $Config{'extensions'}; my %known_extensions = _populate_hash $Config{'known_extensions'}; foreach (keys %known_extensions) { $skip{$_}++ unless $extensions{$_}; } } use File::Spec; my $updir = File::Spec->updir; my $mani = File::Spec->catfile(File::Spec->updir, "MANIFEST"); if (open(MANI, $mani)) { my @manitests = (); my $ext_pat = $^O eq 'MSWin32' ? '(?:win32/)?ext' : 'ext'; while () { # similar code in t/TEST if (m!^($ext_pat/(\S+)/+(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) { my ($test, $extension) = ($1, $2); if (defined $extension) { $extension =~ s!/t$!!; # XXX Do I want to warn that I'm skipping these? next if $skip{$extension}; } push @manitests, File::Spec->catfile($updir, $test); } } close MANI; # Sort the list of test files read from MANIFEST into a sensible # order instead of using the order in which they are listed there push @tests, sort { lc $a cmp lc $b } @manitests; } else { warn "$0: cannot open $mani: $!\n"; } push @tests, ; push @tests, ; } } if ($^O eq 'MSWin32') { s,\\,/,g for @tests; } @tests=grep /$re/, @tests if $re; Test::Harness::runtests @tests; exit(0);