# New Ticket Created by "Paul Cochrane" # Please include the string: [perl #40429] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=40429 >
Hi, This patch adds a test for the perl code coda in a similar manner to the C code coda test. Regards, Paul files affected: perl_code_coda.t
Index: t/codingstd/perl_code_coda.t =================================================================== --- t/codingstd/perl_code_coda.t (revision 0) +++ t/codingstd/perl_code_coda.t (revision 0) @@ -0,0 +1,108 @@ +#! perl +# Copyright (C) 2006, The Perl Foundation. +# $Id$ + +use strict; +use warnings; + +use lib qw( . lib ../lib ../../lib ); +use Test::More tests => 2; +use Parrot::Distribution; + + +=head1 NAME + +t/codingstd/perl_code_coda.t - checks for editor hint coda in perl source + +=head1 SYNOPSIS + + # test all files + % prove t/codingstd/perl_code_coda.t + + # test specific files + % perl t/codingstd/perl_code_coda.t src/foo.pl include/parrot/bar.pm + +=head1 DESCRIPTION + +Checks that all perl source files have the proper editor hints coda, +as specified in PDD07. + +=head1 SEE ALSO + +L<docs/pdds/pdd07_codingstd.pod> + +=cut + + +my $coda = <<'CODA'; +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: +CODA + +my $DIST = Parrot::Distribution->new; +my @files = @ARGV ? @ARGV : perl_files(); +my @no_coda; +my @extra_coda; + +foreach my $file ( @files ) { + my $buf; + my $path; + + ## get the full path of the file + # if we have command line arguments, the file is the full path + if (@ARGV) { + $path = $file; + } + # otherwise, use the relevant Parrot:: path method + else { + $path = $file->path; + } + + # slurp in the file + open(my $fh, '<', $path) + or die "Cannot open '$path' for reading: $!\n"; + { + local $/; + $buf = <$fh>; + } + + # append to the no_coda array if the code doesn't match + push @no_coda => "$path\n" + unless $buf =~ m{\Q$coda\E\n*\z}; + + # append to the extra_coda array if coda-like text appears more than once + my $vim_many =()= $buf =~ m{^ \s* \*? \s* vim: \s* $}gmx; + my $emacs_many =()= $buf =~ m{^ \s* \*? \s* Local variables: \s* $}gmx; + push @extra_coda => "$path\n" + if $vim_many > 1 || $emacs_many > 1; +} + +ok(!scalar(@no_coda), 'Perl code coda present') + or diag("Perl code coda missing in " + . scalar @no_coda . " files:[EMAIL PROTECTED]"); + +ok(!scalar(@extra_coda), 'Perl code coda appears only once') + or diag("Perl code coda repeating in " + . scalar @extra_coda . " files:[EMAIL PROTECTED]"); + +exit; + + +sub perl_files { + return ( + map($_->files_of_type('Perl script'), $DIST->perl_script_file_directories), + map($_->files_of_type('Perl module'), $DIST->perl_module_file_directories), + ); +} + +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: +