3 ##############################################################################
4 # $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/t/00_modules.t $
5 # $Date: 2008-07-03 10:19:10 -0500 (Thu, 03 Jul 2008) $
8 ##############################################################################
14 use English qw(-no_match_vars);
18 use Perl::Critic::TestUtils qw(bundled_policy_names);
22 #-----------------------------------------------------------------------------
24 our $VERSION = '1.088';
26 #-----------------------------------------------------------------------------
28 Perl::Critic::TestUtils::block_perlcriticrc();
30 my @bundled_policy_names = bundled_policy_names();
32 my @concrete_exceptions = qw{
33 AggregateConfiguration
34 Configuration::Generic
35 Configuration::Option::Global::ExtraParameter
36 Configuration::Option::Global::ParameterValue
37 Configuration::Option::Policy::ExtraParameter
38 Configuration::Option::Policy::ParameterValue
41 Fatal::PolicyDefinition
47 + ( 9 * scalar @concrete_exceptions )
48 + ( 14 * scalar @bundled_policy_names );
50 # pre-compute for version comparisons
51 my $version_string = __PACKAGE__->VERSION;
53 #-----------------------------------------------------------------------------
54 # Test Perl::Critic module interface
56 use_ok('Perl::Critic') or BAIL_OUT(q<Can't continue.>);
57 can_ok('Perl::Critic', 'new');
58 can_ok('Perl::Critic', 'add_policy');
59 can_ok('Perl::Critic', 'config');
60 can_ok('Perl::Critic', 'critique');
61 can_ok('Perl::Critic', 'policies');
63 #Set -profile to avoid messing with .perlcriticrc
64 my $critic = Perl::Critic->new( -profile => 'NONE' );
65 isa_ok($critic, 'Perl::Critic');
66 is($critic->VERSION(), $version_string, 'Perl::Critic version');
68 #-----------------------------------------------------------------------------
69 # Test Perl::Critic::Config module interface
71 use_ok('Perl::Critic::Config') or BAIL_OUT(q<Can't continue.>);
72 can_ok('Perl::Critic::Config', 'new');
73 can_ok('Perl::Critic::Config', 'add_policy');
74 can_ok('Perl::Critic::Config', 'policies');
75 can_ok('Perl::Critic::Config', 'exclude');
76 can_ok('Perl::Critic::Config', 'force');
77 can_ok('Perl::Critic::Config', 'include');
78 can_ok('Perl::Critic::Config', 'only');
79 can_ok('Perl::Critic::Config', 'profile_strictness');
80 can_ok('Perl::Critic::Config', 'severity');
81 can_ok('Perl::Critic::Config', 'single_policy');
82 can_ok('Perl::Critic::Config', 'theme');
83 can_ok('Perl::Critic::Config', 'top');
84 can_ok('Perl::Critic::Config', 'verbose');
85 can_ok('Perl::Critic::Config', 'color');
86 can_ok('Perl::Critic::Config', 'criticism_fatal');
87 can_ok('Perl::Critic::Config', 'site_policy_names');
89 #Set -profile to avoid messing with .perlcriticrc
90 my $config = Perl::Critic::Config->new( -profile => 'NONE');
91 isa_ok($config, 'Perl::Critic::Config');
92 is($config->VERSION(), $version_string, 'Perl::Critic::Config version');
94 #-----------------------------------------------------------------------------
95 # Test Perl::Critic::Config::OptionsProcessor module interface
97 use_ok('Perl::Critic::OptionsProcessor') or BAIL_OUT(q<Can't continue.>);
98 can_ok('Perl::Critic::OptionsProcessor', 'new');
99 can_ok('Perl::Critic::OptionsProcessor', 'exclude');
100 can_ok('Perl::Critic::OptionsProcessor', 'include');
101 can_ok('Perl::Critic::OptionsProcessor', 'force');
102 can_ok('Perl::Critic::OptionsProcessor', 'only');
103 can_ok('Perl::Critic::OptionsProcessor', 'profile_strictness');
104 can_ok('Perl::Critic::OptionsProcessor', 'single_policy');
105 can_ok('Perl::Critic::OptionsProcessor', 'severity');
106 can_ok('Perl::Critic::OptionsProcessor', 'theme');
107 can_ok('Perl::Critic::OptionsProcessor', 'top');
108 can_ok('Perl::Critic::OptionsProcessor', 'verbose');
109 can_ok('Perl::Critic::OptionsProcessor', 'color');
110 can_ok('Perl::Critic::OptionsProcessor', 'criticism_fatal');
112 my $processor = Perl::Critic::OptionsProcessor->new();
113 isa_ok($processor, 'Perl::Critic::OptionsProcessor');
114 is($processor->VERSION(), $version_string, 'Perl::Critic::OptionsProcessor version');
116 #-----------------------------------------------------------------------------
117 # Test Perl::Critic::Policy module interface
119 use_ok('Perl::Critic::Policy') or BAIL_OUT(q<Can't continue.>);
120 can_ok('Perl::Critic::Policy', 'add_themes');
121 can_ok('Perl::Critic::Policy', 'applies_to');
122 can_ok('Perl::Critic::Policy', 'default_severity');
123 can_ok('Perl::Critic::Policy', 'default_themes');
124 can_ok('Perl::Critic::Policy', 'get_severity');
125 can_ok('Perl::Critic::Policy', 'get_themes');
126 can_ok('Perl::Critic::Policy', 'new');
127 can_ok('Perl::Critic::Policy', 'set_severity');
128 can_ok('Perl::Critic::Policy', 'set_themes');
129 can_ok('Perl::Critic::Policy', 'violates');
130 can_ok('Perl::Critic::Policy', 'violation');
133 my $policy = Perl::Critic::Policy->new();
134 isa_ok($policy, 'Perl::Critic::Policy');
135 is($policy->VERSION(), $version_string, 'Perl::Critic::Policy version');
137 #-----------------------------------------------------------------------------
138 # Test Perl::Critic::Violation module interface
140 use_ok('Perl::Critic::Violation') or BAIL_OUT(q<Can't continue.>);
141 can_ok('Perl::Critic::Violation', 'description');
142 can_ok('Perl::Critic::Violation', 'diagnostics');
143 can_ok('Perl::Critic::Violation', 'explanation');
144 can_ok('Perl::Critic::Violation', 'get_format');
145 can_ok('Perl::Critic::Violation', 'location');
146 can_ok('Perl::Critic::Violation', 'new');
147 can_ok('Perl::Critic::Violation', 'policy');
148 can_ok('Perl::Critic::Violation', 'set_format');
149 can_ok('Perl::Critic::Violation', 'severity');
150 can_ok('Perl::Critic::Violation', 'sort_by_location');
151 can_ok('Perl::Critic::Violation', 'sort_by_severity');
152 can_ok('Perl::Critic::Violation', 'source');
153 can_ok('Perl::Critic::Violation', 'to_string');
155 my $code = q{print 'Hello World';};
156 my $doc = PPI::Document->new(\$code);
157 my $viol = Perl::Critic::Violation->new(undef, undef, $doc, undef);
158 isa_ok($viol, 'Perl::Critic::Violation');
159 is($viol->VERSION(), $version_string, 'Perl::Critic::Violation version');
161 #-----------------------------------------------------------------------------
162 # Test Perl::Critic::UserProfile module interface
164 use_ok('Perl::Critic::UserProfile') or BAIL_OUT(q<Can't continue.>);
165 can_ok('Perl::Critic::UserProfile', 'options_processor');
166 can_ok('Perl::Critic::UserProfile', 'new');
167 can_ok('Perl::Critic::UserProfile', 'policy_is_disabled');
168 can_ok('Perl::Critic::UserProfile', 'policy_is_enabled');
170 my $up = Perl::Critic::UserProfile->new();
171 isa_ok($up, 'Perl::Critic::UserProfile');
172 is($up->VERSION(), $version_string, 'Perl::Critic::UserProfile version');
174 #-----------------------------------------------------------------------------
175 # Test Perl::Critic::PolicyFactory module interface
177 use_ok('Perl::Critic::PolicyFactory') or BAIL_OUT(q<Can't continue.>);
178 can_ok('Perl::Critic::PolicyFactory', 'create_policy');
179 can_ok('Perl::Critic::PolicyFactory', 'new');
180 can_ok('Perl::Critic::PolicyFactory', 'site_policy_names');
183 my $profile = Perl::Critic::UserProfile->new();
184 my $factory = Perl::Critic::PolicyFactory->new( -profile => $profile );
185 isa_ok($factory, 'Perl::Critic::PolicyFactory');
186 is($factory->VERSION(), $version_string, 'Perl::Critic::PolicyFactory version');
188 #-----------------------------------------------------------------------------
189 # Test Perl::Critic::Theme module interface
191 use_ok('Perl::Critic::Theme') or BAIL_OUT(q<Can't continue.>);
192 can_ok('Perl::Critic::Theme', 'new');
193 can_ok('Perl::Critic::Theme', 'rule');
194 can_ok('Perl::Critic::Theme', 'policy_is_thematic');
197 my $theme = Perl::Critic::Theme->new( -rule => 'foo' );
198 isa_ok($theme, 'Perl::Critic::Theme');
199 is($theme->VERSION(), $version_string, 'Perl::Critic::Theme version');
201 #-----------------------------------------------------------------------------
202 # Test Perl::Critic::PolicyListing module interface
204 use_ok('Perl::Critic::PolicyListing') or BAIL_OUT(q<Can't continue.>);
205 can_ok('Perl::Critic::PolicyListing', 'new');
206 can_ok('Perl::Critic::PolicyListing', 'to_string');
208 my $listing = Perl::Critic::PolicyListing->new();
209 isa_ok($listing, 'Perl::Critic::PolicyListing');
210 is($listing->VERSION(), $version_string, 'Perl::Critic::PolicyListing version');
212 #-----------------------------------------------------------------------------
213 # Test Perl::Critic::ProfilePrototype module interface
215 use_ok('Perl::Critic::ProfilePrototype') or BAIL_OUT(q<Can't continue.>);
216 can_ok('Perl::Critic::ProfilePrototype', 'new');
217 can_ok('Perl::Critic::ProfilePrototype', 'to_string');
219 my $prototype = Perl::Critic::ProfilePrototype->new();
220 isa_ok($prototype, 'Perl::Critic::ProfilePrototype');
221 is($prototype->VERSION(), $version_string, 'Perl::Critic::ProfilePrototype version');
223 #-----------------------------------------------------------------------------
224 # Test module interface for exceptions
228 map { "Perl::Critic::Exception::$_" } @concrete_exceptions
230 use_ok($class) or BAIL_OUT(q<Can't continue.>);
231 can_ok($class, 'new');
232 can_ok($class, 'throw');
233 can_ok($class, 'message');
234 can_ok($class, 'error');
235 can_ok($class, 'full_message');
236 can_ok($class, 'as_string');
238 my $exception = $class->new();
239 isa_ok($exception, $class);
240 is($exception->VERSION(), $version_string, "$class version");
244 #-----------------------------------------------------------------------------
245 # Test module interface for each Policy subclass
248 for my $mod ( @bundled_policy_names ) {
250 use_ok($mod) or BAIL_OUT(q<Can't continue.>);
251 can_ok($mod, 'applies_to');
252 can_ok($mod, 'default_severity');
253 can_ok($mod, 'default_themes');
254 can_ok($mod, 'get_severity');
255 can_ok($mod, 'get_themes');
257 can_ok($mod, 'set_severity');
258 can_ok($mod, 'set_themes');
259 can_ok($mod, 'set_themes');
260 can_ok($mod, 'violates');
261 can_ok($mod, 'violation');
263 my $policy = $mod->new();
264 isa_ok($policy, 'Perl::Critic::Policy');
265 is($policy->VERSION(), $version_string, "Version of $mod");
269 #-----------------------------------------------------------------------------
270 # Test functional interface to Perl::Critic
272 Perl::Critic->import( qw(critique) );
273 can_ok('main', 'critique'); #Export test
275 # TODO: These tests are weak. They just verify that it doesn't
276 # blow up, and that at least one violation is returned.
277 ok( critique( \$code ), 'Functional style, no config' );
278 ok( critique( {}, \$code ), 'Functional style, empty config' );
279 ok( critique( {severity => 1}, \$code ), 'Functional style, with config');
280 ok( !critique(), 'Functional style, no args at all');
281 ok( !critique(undef, undef), 'Functional style, undef args');
283 #-----------------------------------------------------------------------------
285 # ensure we run true if this test is loaded by
286 # t/00_modules.t_without_optional_dependencies.t
291 # cperl-indent-level: 4
293 # indent-tabs-mode: nil
294 # c-indentation-style: bsd
296 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :