1#!/perl -w 2use strict; 3 4# See "Writing a test" in perlhack.pod for the instructions about the order that 5# testing directories run, and which constructions should be avoided in the 6# early tests. 7 8# This regression tests ensures that the rules aren't accidentally overlooked. 9 10BEGIN { 11 chdir 't'; 12 require './test.pl'; 13} 14 15plan('no_plan'); 16 17open my $fh, '<', '../MANIFEST' or die "Can't open MANIFEST: $!"; 18 19# Three tests in t/comp need to use require or use to get their job done: 20my %exceptions = (hints => "require './test.pl'", 21 parser => 'use DieDieDie', 22 proto => 'use strict', 23 ); 24 25while (my $file = <$fh>) { 26 next unless $file =~ s!^t/!!; 27 chomp $file; 28 $file =~ s/\s+.*//; 29 next unless $file =~ m!\.t$!; 30 31 local $/; 32 open my $t, '<', $file or die "Can't open $file: $!"; 33 my $contents = <$t>; 34 # Make sure that we don't match ourselves 35 unlike($contents, qr/use\s+Test::More/, "$file doesn't use Test::\QMore"); 36 next unless $file =~ m!^base/! or $file =~ m!^comp!; 37 38 # Remove only the excepted constructions for the specific files. 39 if ($file =~ m!comp/(.*)\.t! && $exceptions{$1}) { 40 my $allowed = $exceptions{$1}; 41 $contents =~ s/\Q$allowed//gs; 42 } 43 44 # All uses of use are allowed in t/comp/use.t 45 unlike($contents, qr/^\s*use\s+/m, "$file doesn't use use") 46 unless $file eq 'comp/use.t'; 47 # All uses of require are allowed in t/comp/require.t 48 unlike($contents, qr/^\s*require\s+/m, "$file doesn't use require") 49 unless $file eq 'comp/require.t' 50} 51 52# There are regression tests using test.pl that don't want PL_sawampersand 53# set. Or at least that was the case until PL_sawampersand was disabled 54# and replaced with copy-on-write. 55 56# We still allow PL_sawampersand to be enabled with 57# -Accflags=-DPERL_SAWAMPERSAND, so when that is defined we can still run 58# these tests. When it is not enabled, PL_sawampersand makes no observable 59# difference so the tests fail. 60 61require Config; 62exit unless "@{[Config::bincompat_options()]}" =~ /\bPERL_SAWAMPERSAND\b/; 63 64# This very much relies on a bug in the regexp implementation, but for now it's 65# the best way to work out whether PL_sawampersand is true. 66# Then again, PL_sawampersand *is* a bug, for precisely the reason that this 67# test can detect the behaviour change. 68 69isnt($INC{'./test.pl'}, undef, 'We loaded test.pl'); 70ok("Perl rules" =~ /Perl/, 'Perl rules'); 71is(eval '$&', undef, 'Nothing in test.pl mentioned $&'); 72is(eval '$`', undef, 'Nothing in test.pl mentioned $`'); 73is(eval '$\'', undef, 'Nothing in test.pl mentioned $\''); 74# Currently seeing any of the 3 triggers the setting of all 3. 75# $` and $' will be '' rather than undef if the regexp sets them. 76