fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / codingstd / perlcritic.t
blob65bf79b6c27996075aac8d3f174cadaf8b4b8b2f
1 #! perl
2 # Copyright (C) 2008-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/codingstd/perlcritic.t - use perlcritic for perl coding stds.
9 =head1 SYNOPSIS
11  # test all files
12  % prove t/codingstd/perlcritic.t
14  % perl t/codingstd/perlcritic.t [--theme=sometheme]
16  # test specific files
17  % perl t/codingstd/perlcritic.t src/foo.pl lib/parrot/bar.pm
19 =head1 DESCRIPTION
21 By default, tests all perl source files for some very specific perl coding
22 violations.
24 This test uses a standard perlcriticrc file, located in
25 F<tools/dev/perlcritic.conf>
27 If you wish to run a specific policy, the easiest way to do so is to
28 temporarily add a custom theme to the configuration file and then specify
29 that on the command line to this script.
31 =cut
33 use strict;
34 use warnings;
35 use lib qw( lib ../lib ../../lib );
37 use File::Spec;
38 use Getopt::Long;
39 use Parrot::Config qw(%PConfig);
40 use Parrot::Distribution;
41 use Test::More;
43 # There's no point in continuing if we're missing some certain modules, or
44 # if the developer doesn't want to.
46 if (exists $ENV{'PARROT_TEST_NO_PERLCRITIC'}) {
47   give_up('absence of PARROT_TEST_NO_PERLCRITIC environment variable');
50 eval { require Test::Perl::Critic };
51 if ($@) {
52   give_up('Test::Perl::Critic');
55 my $minimum_version = 1.090;
56 if ($Perl::Critic::VERSION < $minimum_version) {
57   give_up("Perl::Critic version $minimum_version");
60 my $theme = 'parrot';
61 GetOptions(
62     'theme=s'   => \$theme
65 my $config = File::Spec->catfile( $PConfig{build_dir}, qw{tools dev perlcritic.conf} );
67 Test::Perl::Critic->import(
68     -profile => $config,
69     -theme   => $theme
72 my $dist = Parrot::Distribution->new();
74 my @files;
75 if ( !@ARGV ) {
77     # We want to skip any language's perl files except those which have declared
78     # they wish to be tested.
79     # As languages are leaving the Parrot repository, there are currently no
80     # languages that want to be tested in the root 'make codetest'.
82     my $languages_dir = File::Spec->catdir( $PConfig{build_dir}, 'languages');
83     my $filter_languages = qr/^\Q$languages_dir$PConfig{slash}\E(?!dummy)/x;
85     @files = grep {! m/$filter_languages/}
86              map  { $_->path }
87              grep { $_->read !~ m/use v6;/ }
88              grep { $_->read !~ m/#! nqp/ }
89              $dist->get_perl_language_files();
91 else {
92     @files = <@ARGV>;
95 plan(tests => scalar(@files));
96 critic_ok($_) foreach @files;
98 sub give_up {
99   my $excuse = shift;
100   plan(skip_all => "$excuse required to criticize code.");
101   exit;
104 # Local Variables:
105 #   mode: cperl
106 #   cperl-indent-level: 4
107 #   fill-column: 100
108 # End:
109 # vim: expandtab shiftwidth=4: