1#!./perl 2 3BEGIN { 4 chdir 't' if -d 't'; 5 @INC = '../lib'; 6 $ENV{PERL5LIB} = '../lib'; 7 require './test.pl'; 8} 9 10$| = 1; 11 12my $Is_VMS = $^O eq 'VMS'; 13my $Is_MSWin32 = $^O eq 'MSWin32'; 14my $Is_NetWare = $^O eq 'NetWare'; 15my $i = 0 ; 16 17my @prgs = () ; 18 19foreach (sort glob("lib/strict/*")) { 20 21 next if -d || /(~|\.orig|,v)$/; 22 23 open F, "<$_" or die "Cannot open $_: $!\n" ; 24 while (<F>) { 25 last if /^__END__/ ; 26 } 27 28 { 29 local $/ = undef; 30 @prgs = (@prgs, split "\n########\n", <F>) ; 31 } 32 close F or die "Could not close: $!" ; 33} 34 35undef $/; 36 37print "1.." . (@prgs + 4) . "\n"; 38 39 40for (@prgs){ 41 my $switch = ""; 42 my @temps = () ; 43 if (s/^\s*-\w+//){ 44 $switch = $&; 45 } 46 my($prog,$expected) = split(/\nEXPECT\n/, $_); 47 if ( $prog =~ /--FILE--/) { 48 my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ; 49 shift @files ; 50 die "Internal error test $i didn't split into pairs, got " . 51 scalar(@files) . "[" . join("%%%%", @files) ."]\n" 52 if @files % 2 ; 53 while (@files > 2) { 54 my $filename = shift @files ; 55 my $code = shift @files ; 56 push @temps, $filename ; 57 open F, ">$filename" or die "Cannot open $filename: $!\n" ; 58 print F $code ; 59 close F or die "Could not close: $!" ; 60 } 61 shift @files ; 62 $prog = shift @files ; 63 } 64 my $tmpfile = tempfile(); 65 open TEST, ">$tmpfile" or die "Could not open: $!"; 66 print TEST $prog,"\n"; 67 close TEST or die "Could not close: $!"; 68 my $results = $Is_MSWin32 ? 69 `.\\perl -I../lib $switch $tmpfile 2>&1` : 70 $^O eq 'NetWare' ? 71 `perl -I../lib $switch $tmpfile 2>&1` : 72 `$^X $switch $tmpfile 2>&1`; 73 my $status = $?; 74 $results =~ s/\n+$//; 75 # allow expected output to be written as if $prog is on STDIN 76 $results =~ s/tmp\d+[A-Z][A-Z]?/-/g; 77 $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg 78 $expected =~ s/\n+$//; 79 my $prefix = ($results =~ s/^PREFIX\n//) ; 80 my $TODO = $prog =~ m/^#\s*TODO:/; 81 if ( $results =~ s/^SKIPPED\n//) { 82 print "$results\n" ; 83 } 84 elsif (($prefix and $results !~ /^\Q$expected/) or 85 (!$prefix and $results ne $expected)){ 86 if (! $TODO) { 87 print STDERR "PROG: $switch\n$prog\n"; 88 print STDERR "EXPECTED:\n$expected\n"; 89 print STDERR "GOT:\n$results\n"; 90 } 91 print "not "; 92 } 93 print "ok " . ++$i . ($TODO ? " # TODO" : "") . "\n"; 94 foreach (@temps) 95 { unlink $_ if $_ } 96} 97 98eval qq(use strict 'garbage'); 99print +($@ =~ /^Unknown 'strict' tag\(s\) 'garbage'/) 100 ? "ok ".++$i."\n" : "not ok ".++$i."\t# $@"; 101 102eval qq(no strict 'garbage'); 103print +($@ =~ /^Unknown 'strict' tag\(s\) 'garbage'/) 104 ? "ok ".++$i."\n" : "not ok ".++$i."\t# $@"; 105 106eval qq(use strict qw(foo bar)); 107print +($@ =~ /^Unknown 'strict' tag\(s\) 'foo bar'/) 108 ? "ok ".++$i."\n" : "not ok ".++$i."\t# $@"; 109 110eval qq(no strict qw(foo bar)); 111print +($@ =~ /^Unknown 'strict' tag\(s\) 'foo bar'/) 112 ? "ok ".++$i."\n" : "not ok ".++$i."\t# $@"; 113