fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / codingstd / pir_code_coda.t
blobd6eb8298b7b9f9159d7bb6ee54e55905f1d80091
1 #! perl
2 # Copyright (C) 2006-2010, Parrot Foundation.
3 # $Id$
5 use strict;
6 use warnings;
8 use lib qw( . lib ../lib ../../lib );
9 use Test::More tests => 2;
10 use Parrot::Distribution;
12 =head1 NAME
14 t/codingstd/pir_code_coda.t - checks for editor hint coda in PIR source
16 =head1 SYNOPSIS
18     # test all files
19     % prove t/codingstd/pir_code_coda.t
21     # test specific files
22     % perl t/codingstd/pir_code_coda.t src/foo.pir
24 =head1 DESCRIPTION
26 Checks that all PIR language source files have the proper editor hints coda,
27 as specified in PDD07.
29 =head1 SEE ALSO
31 L<docs/pdds/pdd07_codingstd.pod>
33 =cut
35 ## L<PDD07/Smart Editor Style Support/"PIR source files must end with this coda">
37 my $coda = <<'CODA';
38 # Local Variables:
39 #   mode: pir
40 #   fill-column: 100
41 # End:
42 # vim: expandtab shiftwidth=4 ft=pir:
43 CODA
45 my $DIST = Parrot::Distribution->new;
46 my @files = @ARGV ? <@ARGV> : $DIST->get_pir_language_files();
47 my @no_coda;
48 my @extra_coda;
50 foreach my $file (@files) {
52     # if we have command line arguments, the file is the full path
53     # otherwise, use the relevant Parrot:: path method
54     my $path = @ARGV ? $file : $file->path;
56     next unless -f $path;
58     my $buf = $DIST->slurp($path);
60     # skip autogenerated files (based on the first line of the file)
61     next if ( index( $buf, "# THIS IS A GENERATED FILE! DO NOT EDIT!" ) == 0 );
63     # append to the no_coda array if the code doesn't match
64     push @no_coda => "$path\n"
65         unless $buf =~ m{\Q$coda\E\n*\z};
67     # append to the extra_coda array if coda-like text appears more than once
68     my $vim_many = 0;
69     $vim_many++ while $buf =~ m{^ [# \t]* vim[:] }gmx;
70     my $emacs_many = 0;
71     $emacs_many++ while $buf =~ m{^ [# \t]* Local \s Variables: }gmx;
72     push @extra_coda => "$path\n"
73         if $vim_many > 1 || $emacs_many > 1;
76 # If we use is_deeply, then the differences will show in the test output.
77 is_deeply( \@no_coda,    [], 'PIR code coda present' );
78 is_deeply( \@extra_coda, [], 'PIR code coda appears only once' );
80 # Local Variables:
81 #   mode: cperl
82 #   cperl-indent-level: 4
83 #   fill-column: 100
84 # End:
85 # vim: expandtab shiftwidth=4: