Author: fperrad Date: Thu Jan 29 09:34:12 2009 New Revision: 36148 Added: trunk/t/codingstd/make_code_coda.t (contents, props changed)
Changes in other areas also in this revision: Modified: trunk/docs/pdds/pdd07_codingstd.pod Log: [codingstd] add check of Makefile coda Added: trunk/t/codingstd/make_code_coda.t ============================================================================== --- (empty file) +++ trunk/t/codingstd/make_code_coda.t Thu Jan 29 09:34:12 2009 @@ -0,0 +1,76 @@ +#! perl +# Copyright (C) 2009, The Perl Foundation. +# $Id: $ + +use strict; +use warnings; + +use lib qw( . lib ../lib ../../lib ); +use Test::More tests => 2; +use Parrot::Distribution; +use Parrot::Test::Util::Runloop; + +=head1 NAME + +t/codingstd/make_code_coda.t - checks for editor hint coda in Make source + +=head1 SYNOPSIS + + # test all files + % prove t/codingstd/make_code_coda.t + + # test specific files + % perl t/codingstd/make_code_coda.t config/gen/makefiles/pge.in + +=head1 DESCRIPTION + +Checks that all Make language 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: makefile +# End: +# vim: ft=make: +CODA + +my $DIST = Parrot::Distribution->new; +my @files = @ARGV ? @ARGV : $DIST->get_make_language_files(); + +Parrot::Test::Util::Runloop->testloop( + name => 'every file has a coda', + files => [...@files], + per_file => sub { shift =~ m{\Q$coda\E\n*\z} }, + diag_prefix => 'No coda found' +); + +Parrot::Test::Util::Runloop->testloop( + name => 'only one coda per file', + files => [...@files], + per_file => \&check_duplicates, + diag_prefix => 'Duplicate coda found' +); + +sub check_duplicates { + my $buf = shift; + + # append to the extra_coda array if coda-like text appears more than once + my $vim_many = 0; + $vim_many++ while $buf =~ m{^ [* \t]* vim[:] }gmx; + my $emacs_many = 0; + $emacs_many++ while $buf =~ m{^ [* \t]* Local \s variables: }gmx; + return ($vim_many <= 1 && $emacs_many <= 1); +} + +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: