| 1 | #!./perl
|
|---|
| 2 |
|
|---|
| 3 | # We suppose that perl _mostly_ works at this moment, so may use
|
|---|
| 4 | # sophisticated testing.
|
|---|
| 5 |
|
|---|
| 6 | BEGIN {
|
|---|
| 7 | chdir 't' if -d 't';
|
|---|
| 8 | @INC = '../lib'; # pick up only this build's lib
|
|---|
| 9 | $ENV{PERL5LIB} = '../lib'; # so children will see it too
|
|---|
| 10 | }
|
|---|
| 11 |
|
|---|
| 12 | my $torture; # torture testing?
|
|---|
| 13 |
|
|---|
| 14 | use Test::Harness;
|
|---|
| 15 |
|
|---|
| 16 | $Test::Harness::switches = ""; # Too much noise otherwise
|
|---|
| 17 | $Test::Harness::verbose = shift if @ARGV && $ARGV[0] eq '-v';
|
|---|
| 18 |
|
|---|
| 19 | if ($ARGV[0] && $ARGV[0] eq '-torture') {
|
|---|
| 20 | shift;
|
|---|
| 21 | $torture = 1;
|
|---|
| 22 | }
|
|---|
| 23 |
|
|---|
| 24 | # Let tests know they're running in the perl core. Useful for modules
|
|---|
| 25 | # which live dual lives on CPAN.
|
|---|
| 26 | $ENV{PERL_CORE} = 1;
|
|---|
| 27 |
|
|---|
| 28 | #fudge DATA for now.
|
|---|
| 29 | %datahandle = qw(
|
|---|
| 30 | lib/bigint.t 1
|
|---|
| 31 | lib/bigintpm.t 1
|
|---|
| 32 | lib/bigfloat.t 1
|
|---|
| 33 | lib/bigfloatpm.t 1
|
|---|
| 34 | op/gv.t 1
|
|---|
| 35 | lib/complex.t 1
|
|---|
| 36 | lib/ph.t 1
|
|---|
| 37 | lib/soundex.t 1
|
|---|
| 38 | op/misc.t 1
|
|---|
| 39 | op/runlevel.t 1
|
|---|
| 40 | op/tie.t 1
|
|---|
| 41 | op/lex_assign.t 1
|
|---|
| 42 | );
|
|---|
| 43 |
|
|---|
| 44 | foreach (keys %datahandle) {
|
|---|
| 45 | unlink "$_.t";
|
|---|
| 46 | }
|
|---|
| 47 |
|
|---|
| 48 | my @tests = ();
|
|---|
| 49 |
|
|---|
| 50 | # [.VMS]TEST.COM calls harness with empty arguments, so clean-up @ARGV
|
|---|
| 51 | @ARGV = grep $_ && length( $_ ) => @ARGV;
|
|---|
| 52 |
|
|---|
| 53 | sub _populate_hash {
|
|---|
| 54 | return map {$_, 1} split /\s+/, $_[0];
|
|---|
| 55 | }
|
|---|
| 56 |
|
|---|
| 57 | if ($ARGV[0] && $ARGV[0]=~/^-re/) {
|
|---|
| 58 | if ($ARGV[0]!~/=/) {
|
|---|
| 59 | shift;
|
|---|
| 60 | $re=join "|",@ARGV;
|
|---|
| 61 | @ARGV=();
|
|---|
| 62 | } else {
|
|---|
| 63 | (undef,$re)=split/=/,shift;
|
|---|
| 64 | }
|
|---|
| 65 | }
|
|---|
| 66 |
|
|---|
| 67 | if (@ARGV) {
|
|---|
| 68 | if ($^O eq 'MSWin32') {
|
|---|
| 69 | @tests = map(glob($_),@ARGV);
|
|---|
| 70 | }
|
|---|
| 71 | else {
|
|---|
| 72 | @tests = @ARGV;
|
|---|
| 73 | }
|
|---|
| 74 | } else {
|
|---|
| 75 | unless (@tests) {
|
|---|
| 76 | push @tests, <base/*.t>;
|
|---|
| 77 | push @tests, <comp/*.t>;
|
|---|
| 78 | push @tests, <cmd/*.t>;
|
|---|
| 79 | push @tests, <run/*.t>;
|
|---|
| 80 | push @tests, <io/*.t>;
|
|---|
| 81 | push @tests, <op/*.t>;
|
|---|
| 82 | push @tests, <uni/*.t>;
|
|---|
| 83 | push @tests, <lib/*.t>;
|
|---|
| 84 | push @tests, <japh/*.t> if $torture;
|
|---|
| 85 | push @tests, <win32/*.t> if $^O eq 'MSWin32';
|
|---|
| 86 | use Config;
|
|---|
| 87 | my %skip;
|
|---|
| 88 | {
|
|---|
| 89 | my %extensions = _populate_hash $Config{'extensions'};
|
|---|
| 90 | my %known_extensions = _populate_hash $Config{'known_extensions'};
|
|---|
| 91 | foreach (keys %known_extensions) {
|
|---|
| 92 | $skip{$_}++ unless $extensions{$_};
|
|---|
| 93 | }
|
|---|
| 94 | }
|
|---|
| 95 | use File::Spec;
|
|---|
| 96 | my $updir = File::Spec->updir;
|
|---|
| 97 | my $mani = File::Spec->catfile(File::Spec->updir, "MANIFEST");
|
|---|
| 98 | if (open(MANI, $mani)) {
|
|---|
| 99 | while (<MANI>) { # similar code in t/TEST
|
|---|
| 100 | if (m!^(ext/(\S+)/+(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) {
|
|---|
| 101 | my ($test, $extension) = ($1, $2);
|
|---|
| 102 | if (defined $extension) {
|
|---|
| 103 | $extension =~ s!/t$!!;
|
|---|
| 104 | # XXX Do I want to warn that I'm skipping these?
|
|---|
| 105 | next if $skip{$extension};
|
|---|
| 106 | }
|
|---|
| 107 | push @tests, File::Spec->catfile($updir, $test);
|
|---|
| 108 | }
|
|---|
| 109 | }
|
|---|
| 110 | close MANI;
|
|---|
| 111 | } else {
|
|---|
| 112 | warn "$0: cannot open $mani: $!\n";
|
|---|
| 113 | }
|
|---|
| 114 | push @tests, <pod/*.t>;
|
|---|
| 115 | push @tests, <x2p/*.t>;
|
|---|
| 116 | }
|
|---|
| 117 | }
|
|---|
| 118 | if ($^O eq 'MSWin32') {
|
|---|
| 119 | s,\\,/,g for @tests;
|
|---|
| 120 | }
|
|---|
| 121 | @tests=grep /$re/, @tests
|
|---|
| 122 | if $re;
|
|---|
| 123 | Test::Harness::runtests @tests;
|
|---|
| 124 | exit(0) unless -e "../testcompile";
|
|---|
| 125 |
|
|---|
| 126 | # %infinite = qw (
|
|---|
| 127 | # op/bop.t 1
|
|---|
| 128 | # lib/hostname.t 1
|
|---|
| 129 | # op/lex_assign.t 1
|
|---|
| 130 | # lib/ph.t 1
|
|---|
| 131 | # );
|
|---|
| 132 |
|
|---|
| 133 | my $dhwrapper = <<'EOT';
|
|---|
| 134 | open DATA,"<".__FILE__;
|
|---|
| 135 | until (($_=<DATA>) =~ /^__END__/) {};
|
|---|
| 136 | EOT
|
|---|
| 137 |
|
|---|
| 138 | @tests = grep (!$infinite{$_}, @tests);
|
|---|
| 139 | @tests = map {
|
|---|
| 140 | my $new = $_;
|
|---|
| 141 | if ($datahandle{$_} && !( -f "$new.t") ) {
|
|---|
| 142 | $new .= '.t';
|
|---|
| 143 | local(*F, *T);
|
|---|
| 144 | open(F,"<$_") or die "Can't open $_: $!";
|
|---|
| 145 | open(T,">$new") or die "Can't open $new: $!";
|
|---|
| 146 | print T $dhwrapper, <F>;
|
|---|
| 147 | close F;
|
|---|
| 148 | close T;
|
|---|
| 149 | }
|
|---|
| 150 | $new;
|
|---|
| 151 | } @tests;
|
|---|
| 152 |
|
|---|
| 153 | print "The tests ", join(' ', keys(%infinite)),
|
|---|
| 154 | " generate infinite loops! Skipping!\n";
|
|---|
| 155 |
|
|---|
| 156 | $ENV{'HARNESS_COMPILE_TEST'} = 1;
|
|---|
| 157 | $ENV{'PERLCC_TIMEOUT'} = 120 unless $ENV{'PERLCC_TIMEOUT'};
|
|---|
| 158 |
|
|---|
| 159 | Test::Harness::runtests @tests;
|
|---|
| 160 | foreach (keys %datahandle) {
|
|---|
| 161 | unlink "$_.t";
|
|---|
| 162 | }
|
|---|