Login
I think I've finally fixed the problem of false-positives coming from leading tabs...
[gknop/Perl-Critic.git] / t / 20_policy_prohibithardtabs.t
1 #!perl
2
3 ##############################################################################
4 #      $URL$
5 #     $Date$
6 #   $Author$
7 # $Revision$
8 ##############################################################################
9
10 use 5.006001;
11 use strict;
12 use warnings;
13
14 # common P::C testing tools
15 use Perl::Critic::TestUtils qw(pcritique fcritique);
16
17 use Test::More tests => 10;
18
19 #-----------------------------------------------------------------------------
20
21 our $VERSION = '1.090';
22
23 #-----------------------------------------------------------------------------
24
25 Perl::Critic::TestUtils::block_perlcriticrc();
26
27 # This specific policy is being tested without run.t because the .run file
28 # would have to contain invisible characters.
29
30 my $code;
31 my $policy = 'CodeLayout::ProhibitHardTabs';
32 my %config;
33
34 #-----------------------------------------------------------------------------
35
36 $code = <<"END_PERL";
37 #This will be interpolated!
38
39 sub my_sub {
40 \tfor(1){
41 \t\tdo_something();
42 \t}
43 }
44
45 \t\t\t;
46
47 END_PERL
48
49 is( pcritique($policy, \$code), 0, $policy );
50
51 #-----------------------------------------------------------------------------
52
53 $code = <<"END_PERL";
54 #This will be interpolated!
55 print "\t  \t  foobar  \t";
56 END_PERL
57
58 is( pcritique($policy, \$code), 1, $policy );
59
60 #-----------------------------------------------------------------------------
61
62 $code = <<"END_PERL";
63 #This will be interpolated!
64
65 my \@list = qw(
66 \tfoo
67 \tbar
68 \tbaz
69 );
70
71 END_PERL
72
73 is( pcritique($policy, \$code, \%config), 0, 'Leading tabs in qw()' );
74
75 #-----------------------------------------------------------------------------
76
77 $code = <<"END_PERL";
78 #This will be interpolated!
79
80 my \@list = qw(
81 \tfoo\tbar
82 \tbaz\tnuts
83 );
84
85 END_PERL
86
87 is( pcritique($policy, \$code, \%config), 1, 'Non-leading tabs in qw()' );
88
89 #-----------------------------------------------------------------------------
90 # RT #32440
91
92 $code = <<"END_PERL";
93 #This will be interpolated!
94 \$x =~ m/
95 \tsome
96 \t(really | long)
97 \tpattern
98 /mx;
99
100 #This will be interpolated!
101 \$z = qr/
102 \tsome
103 \t(really | long)
104 \tpattern
105 /mx;
106
107 END_PERL
108
109 is( pcritique($policy, \$code, \%config), 0, 'Leading tabs in extended regex' );
110
111 #-----------------------------------------------------------------------------
112 # RT #32440
113
114 $code = <<"END_PERL";
115 #This will be interpolated!
116 #Note that these regex does not have /x, so tabs are significant
117
118 \$x =~ m/
119 \tsome
120 \tugly
121 \tpattern
122 /m;
123
124
125 \$z = qr/
126 \tsome
127 \tugly
128 \tpattern
129 /gis;
130
131 END_PERL
132
133 is( pcritique($policy, \$code, \%config), 2, 'Leading tabs in non-extended regex' );
134
135 #-----------------------------------------------------------------------------
136 # RT #32440
137
138 $code = <<"END_PERL";
139 #This will be interpolated!
140 #Note that these regex does not have /x, so tabs are significant
141
142 \$x =~ m/
143 \tsome\tugly\tpattern
144 /xm;
145
146 END_PERL
147
148 is( pcritique($policy, \$code, \%config), 1, 'Non-leading tabs in extended regex' );
149
150 #-----------------------------------------------------------------------------
151
152 $code = <<"END_PERL";
153 ##This will be interpolated!
154
155 sub my_sub {
156 \tfor(1){
157 \t\tdo_something();
158 \t}
159 }
160
161 END_PERL
162
163 %config = (allow_leading_tabs => 0);
164 is( pcritique($policy, \$code, \%config), 3, $policy );
165
166 #-----------------------------------------------------------------------------
167
168 $code = <<"END_PERL";
169 ##This will be interpolated!
170
171 sub my_sub {
172 ;\tfor(1){
173 \t\tdo_something();
174 ;\t}
175 }
176
177 END_PERL
178
179 %config = (allow_leading_tabs => 0);
180 is( pcritique($policy, \$code, \%config), 3, $policy );
181
182 #-----------------------------------------------------------------------------
183
184 $code = <<"END_PERL";
185 #This will be interpolated!
186
187 __DATA__
188 foo\tbar\tbaz
189 \tfred\barney
190
191 END_PERL
192
193 %config = (allow_leading_tabs => 0);
194 is( pcritique($policy, \$code, \%config), 0, 'Tabs in __DATA__' );
195
196 #-----------------------------------------------------------------------------
197
198 # Local Variables:
199 #   mode: cperl
200 #   cperl-indent-level: 4
201 #   fill-column: 78
202 #   indent-tabs-mode: nil
203 #   c-indentation-style: bsd
204 # End:
205 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :