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