From: Nicholas Clark Date: Thu, 27 Aug 2009 12:23:38 +0000 (+0100) Subject: Share common code in t/TEST and t/harness, by having harness require ./TEST X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c537bcda150384467d5ff232f1f1b27075e03c5b;p=p5sagit%2Fp5-mst-13.2.git Share common code in t/TEST and t/harness, by having harness require ./TEST The logical way to do this would be to have the common code in a file both require or use. However, t/TEST needs to still work, to generate test results, even if require isn't working, so we cannot do that. t/harness has no such restriction, so it is quite acceptable to have it require t/TEST. --- diff --git a/t/TEST b/t/TEST index 58f1da5..6589ee2 100755 --- a/t/TEST +++ b/t/TEST @@ -5,6 +5,19 @@ # probably obsolete on the avoidance side, though still currrent # on the peculiarity side.) +# t/TEST and t/harness need to share code. The logical way to do this would be +# to have the common code in a file both require or use. However, t/TEST needs +# to still work, to generate test results, even if require isn't working, so +# we cannot do that. t/harness has no such restriction, so it is quite +# acceptable to have it require t/TEST. + +# In which case, we need to stop t/TEST actually running tests, as all +# t/harness needs are its subroutines. + +if ($::do_nothing) { + return 1; +} + # Location to put the Valgrind log. my $Valgrind_Log = 'current.valgrind'; diff --git a/t/harness b/t/harness index 662afb6..11c1741 100644 --- a/t/harness +++ b/t/harness @@ -7,6 +7,7 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; # pick up only this build's lib } + delete $ENV{PERL5LIB}; my $torture; # torture testing? @@ -14,6 +15,9 @@ my $torture; # torture testing? use TAP::Harness 3.13; use strict; +$::do_nothing = $::do_nothing = 1; +require './TEST'; + my $Verbose = 0; $Verbose++ while @ARGV && $ARGV[0] eq '-v' && shift; @@ -51,10 +55,6 @@ my (@tests, $re); # [.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]; -} - sub _extract_tests; sub _extract_tests { # This can probably be done more tersely with a map, but I doubt that it @@ -103,40 +103,6 @@ if ($ENV{HARNESS_OPTIONS}) { } } -sub _tests_from_manifest { - my ($extensions, $known_extensions) = @_; - my %skip; - my %extensions = _populate_hash($extensions); - my %known_extensions = _populate_hash($known_extensions); - - foreach (keys %known_extensions) { - $skip{$_}++ unless $extensions{$_}; - } - - my @results; - my $mani = '../MANIFEST'; - if (open(MANI, $mani)) { - while () { # similar code in t/TEST - 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}; - my $flat_extension = $extension; - $flat_extension =~ s!-!/!g; - next if $skip{$flat_extension}; # Foo/Bar may live in Foo-Bar - } - push @results, "../$test"; - } - } - close MANI; - } else { - warn "$0: cannot open $mani: $!\n"; - } - return @results; -} - if (@ARGV) { # If you want these run in speed order, just use prove if ($^O eq 'MSWin32') {