summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2004-10-31 14:37:46 +0000
committerNicholas Clark <nick@ccl4.org>2004-10-31 14:37:46 +0000
commit6234cb77344e822f4c34885de4971401d9a78b0b (patch)
tree4a153412e25e23eb8b1c02e556f8db60b3cd0b33 /t
parent181f6ff5f88de6db5f8bade64a581afc9c32fcfc (diff)
downloadperl-6234cb77344e822f4c34885de4971401d9a78b0b.tar.gz
Make TEST and harness skip tests for extensions that were not
configured. Currently this skipping is silent - maybe they should report what they are skipping. p4raw-id: //depot/perl@23448
Diffstat (limited to 't')
-rwxr-xr-xt/TEST42
-rw-r--r--t/harness23
2 files changed, 62 insertions, 3 deletions
diff --git a/t/TEST b/t/TEST
index fb3adb932f..38afe6f691 100755
--- a/t/TEST
+++ b/t/TEST
@@ -95,18 +95,58 @@ sub _quote_args {
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;
diff --git a/t/harness b/t/harness
index e745db8a34..4fc77460e7 100644
--- a/t/harness
+++ b/t/harness
@@ -50,6 +50,10 @@ 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) {
if ($^O eq 'MSWin32') {
@tests = map(glob($_),@ARGV);
@@ -69,13 +73,28 @@ if (@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;