Login
Add new policy Variables::ProhibitMatchVars
[gknop/Perl-Critic.git] / t / 20_policies_variables.t
1 ##################################################################
2 #     $URL$
3 #    $Date$
4 #   $Author$
5 # $Revision$
6 ##################################################################
7
8 use strict;
9 use warnings;
10 use Test::More tests => 10;
11 use Perl::Critic::Config;
12 use Perl::Critic;
13
14 # common P::C testing tools
15 use lib qw(t/tlib);
16 use PerlCriticTestUtils qw(pcritique);
17 PerlCriticTestUtils::block_perlcriticrc();
18
19 my $code ;
20 my $policy;
21 my %config;
22
23 #----------------------------------------------------------------
24
25 $code = <<'END_PERL';
26 local $foo = $bar;
27 local $/ = undef;
28 local $| = 1;
29 local ($foo, $bar) = ();
30 local ($/) = undef;
31 local ($RS, $>) = ();
32 local ($foo, %SIG);
33 END_PERL
34
35 $policy = 'Variables::ProhibitLocalVars';
36 is( pcritique($policy, \$code), 7, $policy);
37
38 #----------------------------------------------------------------
39
40 $code = <<'END_PERL';
41 local ($RS);
42 local $INPUT_RECORD_SEPARATOR;
43 local $PROGRAM_NAME;
44 local ($EVAL_ERROR, $OS_ERROR);
45 local $Other::Package::foo;
46 local (@Other::Package::foo, $EVAL_ERROR);
47 my  $var1 = 'foo';
48 our $var2 = 'bar';
49 local $SIG{HUP} \&handler;
50 local $INC{$module} = $path;
51 END_PERL
52
53 $policy = 'Variables::ProhibitLocalVars';
54 is( pcritique($policy, \$code), 0, $policy);
55
56 #----------------------------------------------------------------
57
58 $code = <<'END_PERL';
59 use English;
60  use English qw($PREMATCH) ; 
61 use English qw($MATCH);
62 use English qw($POSTMATCH);
63 $`;
64 $&;
65 $';
66 $PREMATCH;
67 $MATCH;
68 $POSTMATCH;
69 END_PERL
70
71 $policy = 'Variables::ProhibitMatchVars';
72 is( pcritique($policy, \$code), 10, $policy);
73
74 #----------------------------------------------------------------
75
76 $code = <<'END_PERL';
77 use English qw(-no_match_vars);
78 use English qw($EVAL_ERROR);
79 END_PERL
80
81 $policy = 'Variables::ProhibitMatchVars';
82 is( pcritique($policy, \$code), 0, $policy);
83
84 #----------------------------------------------------------------
85
86 $code = <<'END_PERL';
87 our $var1 = 'foo';
88 our (%var2, %var3) = 'foo';
89 our (%VAR4, $var5) = ();
90
91 $Package::foo;
92 @Package::list = ('nuts');
93 %Package::hash = ('nuts');
94
95 $::foo = $bar;
96 @::foo = ($bar);
97 %::foo = ();
98
99 use vars qw($fooBar $baz);
100 use vars qw($fooBar @EXPORT);
101 use vars '$fooBar', "$baz";
102 use vars '$fooBar', '@EXPORT';
103 use vars ('$fooBar', '$baz');
104 use vars ('$fooBar', '@EXPORT');
105 END_PERL
106
107 $policy = 'Variables::ProhibitPackageVars';
108 is( pcritique($policy, \$code), 15, $policy);
109
110 #----------------------------------------------------------------
111
112 $code = <<'END_PERL';
113 our $VAR1 = 'foo';
114 our (%VAR2, %VAR3) = ();
115 our $VERSION = '1.0';
116 our @EXPORT = qw(some symbols);
117
118 use vars qw($VERSION @EXPORT);
119 use vars ('$VERSION, '@EXPORT');
120 use vars  '$VERSION, '@EXPORT';
121
122 #local $Foo::bar;
123 #local @This::that;
124 #local %This::that;
125 #local $This::that{ 'key' };
126 #local $This::that[ 1 ];
127 #local (@Baz::bar, %Baz::foo);
128
129 $Package::VERSION = '1.2';
130 %Package::VAR = ('nuts');
131 @Package::EXPORT = ();
132
133 $::VERSION = '1.2';
134 %::VAR = ('nuts');
135 @::EXPORT = ();
136 &Package::my_sub();
137 &::my_sub();
138 END_PERL
139
140 $policy = 'Variables::ProhibitPackageVars';
141 is( pcritique($policy, \$code), 0, $policy);
142
143 #----------------------------------------------------------------
144
145 $code = <<'END_PERL';
146 my $var1 = 'foo';
147 my %var2 = 'foo';
148 my ($foo, $bar) = ();
149 END_PERL
150
151 $policy = 'Variables::ProhibitPackageVars';
152 is( pcritique($policy, \$code), 0, $policy);
153
154 #----------------------------------------------------------------
155
156 $code = <<'END_PERL';
157 $/ = undef;
158 $| = 1;
159 $> = 3;
160 END_PERL
161
162 $policy = 'Variables::ProhibitPunctuationVars';
163 is( pcritique($policy, \$code), 3, $policy);
164
165 #----------------------------------------------------------------
166
167 $code = <<'END_PERL';
168 $RS = undef;
169 $INPUT_RECORD_SEPARATOR = "\n";
170 $OUTPUT_AUTOFLUSH = 1;
171 print $foo, $baz;
172 END_PERL
173
174 $policy = 'Variables::ProhibitPunctuationVars';
175 is( pcritique($policy, \$code), 0, $policy);
176
177 #----------------------------------------------------------------
178
179 $code = <<'END_PERL';
180 $string =~ /((foo)bar)/;
181 $foobar = $1;
182 $foo = $2;
183 $3;
184 $stat = stat(_);
185 @list = @_;
186 my $line = $_;
187 END_PERL
188
189 $policy = 'Variables::ProhibitPunctuationVars';
190 is( pcritique($policy, \$code), 0, $policy);
191