Author: particle
Date: Wed Feb  7 11:17:54 2007
New Revision: 16916

Added:
   trunk/t/codingstd/c_struct.t   (contents, props changed)
Modified:
   trunk/MANIFEST

Log:
[PDD07]: coding standard tests for C source
~ Structure types must have tags
30 failing tests

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Wed Feb  7 11:17:54 2007
@@ -2581,6 +2581,7 @@
 t/codingstd/c_code_coda.t                                   []
 t/codingstd/c_indent.t                                      []
 t/codingstd/c_parens.t                                      []
+t/codingstd/c_struct.t                                      []
 t/codingstd/cppcomments.t                                   []
 t/codingstd/cuddled_else.t                                  []
 t/codingstd/fixme.t                                         []

Added: trunk/t/codingstd/c_struct.t
==============================================================================
--- (empty file)
+++ trunk/t/codingstd/c_struct.t        Wed Feb  7 11:17:54 2007
@@ -0,0 +1,66 @@
+#! perl
+# Copyright (C) 2006, The Perl Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More tests => 1;
+use Parrot::Distribution;
+
+=head1 NAME
+
+t/codingstd/c_struct.t - checks for struct tags in C source and headers
+
+=head1 SYNOPSIS
+
+    # test all files
+    % prove t/codingstd/c_struct.t
+
+    # test specific files
+    % perl t/codingstd/c_struct.t src/foo.c include/parrot/bar.h
+
+=head1 DESCRIPTION
+
+Checks that all C source files use struct tags, as defined in PDD07.
+
+=head1 SEE ALSO
+
+L<docs/pdds/pdd07_codingstd.pod>
+
+=cut
+
+my $DIST = Parrot::Distribution->new;
+my @files = @ARGV
+    ? $^O eq 'MSWin32' ? <@ARGV> : @ARGV
+    : $DIST->get_c_language_files();
+my @struct;
+
+for my $file (@files) {
+    my $path = ref $file ? $file->path : $file;
+
+    open my $fh, '<', $path
+        or die "Cannot open '$path' for reading: $!\n";
+
+    my $count;
+    my $message = qq<  $path:>;
+    while (<$fh>) {
+        next unless /\bstruct\s+{/;
+        $count++;
+        $message .= " $.";
+    }
+    push @struct => "$message\n"
+        if $count;
+    close $fh;
+}
+
+# L<PDD07/Code Structure/=item Structure types must have tags>
+ok( !scalar(@struct), "structure types must have tags" )
+    or diag( "struct without tag found in " . scalar @struct . " files:[EMAIL 
PROTECTED]" );
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Reply via email to