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 | }
|
---|