return $argstring;
}
+sub _populate_hash {
+ return map {$_, 1} split /\s+/, $_[0];
+}
+
unless (@ARGV) {
foreach my $dir (qw(base comp cmd run io op uni)) {
_find_tests($dir);
}
_find_tests("lib") unless $core;
+ # Config.pm may be broken for make minitest. And this is only a refinement
+ # for skipping tests on non-default builds, so it is allowed to fail.
+ # What we want to to is make a list of extensions which we did not build.
+ my $configsh = File::Spec->catfile($updir, "config.sh");
+ my %skip;
+ if (-f $configsh) {
+ my (%extensions, %known_extensions);
+ open FH, $configsh or die "Can't open $configsh: $!";
+ while (<FH>) {
+ if (/^extensions=['"](.*)['"]$/) {
+ # Deliberate string interpolation to avoid triggering possible
+ # $1 resetting bugs.
+ %extensions = _populate_hash ("$1");
+ }
+ elsif (/^known_extensions=['"](.*)['"]$/) {
+ %known_extensions = _populate_hash ($1);
+ }
+ }
+ if (%extensions) {
+ if (%known_extensions) {
+ foreach (keys %known_extensions) {
+ $skip{$_}++ unless $extensions{$_};
+ }
+ } else {
+ warn "No known_extensions line found in $configsh";
+ }
+ } else {
+ warn "No extensions line found in $configsh";
+ }
+ }
my $mani = File::Spec->catfile($updir, "MANIFEST");
if (open(MANI, $mani)) {
while (<MANI>) { # similar code in t/harness
- if (m!^(ext/\S+/?(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) {
+ if (m!^(ext/(\S+)/+(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) {
$t = $1;
+ $extension = $2;
if (!$core || $t =~ m!^lib/[a-z]!)
{
+ if (defined $extension) {
+ $extension =~ s!/t$!!;
+ # XXX Do I want to warn that I'm skipping these?
+ next if $skip{$extension};
+ }
$path = File::Spec->catfile($updir, $t);
push @ARGV, $path;
$name{$path} = $t;
# [.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) {
if ($^O eq 'MSWin32') {
@tests = map(glob($_),@ARGV);
push @tests, <lib/*.t>;
push @tests, <japh/*.t> if $torture;
push @tests, <win32/*.t> 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)) {
while (<MANI>) { # similar code in t/TEST
- if (m!^(ext/\S+/?(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) {
- push @tests, File::Spec->catfile($updir, $1);
+ if (m!^(ext/(\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 @tests, File::Spec->catfile($updir, $test);
}
}
close MANI;