From 5635a72d52ac1195341df7686b3f7f36c596f156 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Wed, 1 Aug 2007 19:20:07 +0000
Subject: added perl classaudit tool

---
 tools/classaudit.pl | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 133 insertions(+)
 create mode 100755 tools/classaudit.pl

diff --git a/tools/classaudit.pl b/tools/classaudit.pl
new file mode 100755
index 0000000..efe0069
--- /dev/null
+++ b/tools/classaudit.pl
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+#
+# Audit tool for OpenSim class and namespace definitions.
+#
+# Copyright 2007 IBM
+# 
+# Authors: Sean Dague
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions are met:
+#      * Redistributions of source code must retain the above copyright
+#        notice, this list of conditions and the following disclaimer.
+#      * Redistributions in binary form must reproduce the above copyright
+#        notice, this list of conditions and the following disclaimer in the
+#        documentation and/or other materials provided with the distribution.
+#      * Neither the name of the OpenSim Project nor the
+#        names of its contributors may be used to endorse or promote products
+#        derived from this software without specific prior written permission.
+# 
+#  THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
+#  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+#  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+#  DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+#  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+#  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+#  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+use strict;
+use File::Find;
+use Data::Dumper;
+use constant YELLOW => "\033[33m";
+use constant RED => "\033[31m";
+use constant CLEAR => "\033[0m";
+our %totals;
+
+
+find(\&test, "../OpenSim");
+print Dumper(\%totals);
+
+sub test {
+    my $file = $File::Find::name;
+    my $dir = $File::Find::dir;
+    $file =~ s{^../}{}; #strip off prefix
+    $dir =~ s{^../}{}; #strip off prefix
+    
+    return if ($file !~ /\.cs$/);
+    return if ($file =~ /AssemblyInfo\.cs$/);
+
+    print "Processing File: $file\n";
+
+    my $namespace = find_namespace($_);
+    my $class = find_class($_);
+
+    
+
+    if(cmp_namespace($namespace, $dir) == 1) {
+        $totals{goodns}++;
+    } else {
+        $totals{badns}++;
+    }
+    
+
+    if(cmp_class($namespace, $class, $file) == 1) {
+        $totals{goodclass}++;
+    } else {
+        $totals{badclass}++;
+    }
+    print "\n";
+}
+
+sub find_class {
+    my $file = shift;
+    my $content = slurp($file);
+    if ($content =~ /\n\s*(public|private|protected)?\s*(class|interface)\s+(\S+)/) {
+        return $3;
+    }
+    return "";
+}
+
+sub find_namespace {
+    my $file = shift;
+    my $content = slurp($file);
+    
+    if ($content =~ /\bnamespace\s+(\S+)/s) {
+        return $1;
+    }
+    return "";
+}
+
+sub slurp {
+    my $file = shift;
+    local(*IN);
+    local $/ = undef;
+    
+    open(IN, "$file") or die "Can't open '$file': $!";
+    my $content = <IN>;
+    close(IN);
+    
+    return $content;
+}
+
+sub cmp_class {
+    my ($ns, $class, $file) = @_;
+    $class = "$ns.$class";
+    my $classtrans = $class;
+    $classtrans =~ s{\.}{/}g;
+    $classtrans .= ".cs";
+    
+    if($classtrans ne $file) {
+        error(YELLOW, "CLASS: $class != $file");
+        return -1;
+    }
+    return 1;
+}
+
+sub cmp_namespace {
+    my ($ns, $dir) = @_;
+    my $nstrans = $ns;
+    $nstrans =~ s{\.}{/}g;
+
+    if($nstrans ne $dir) {
+        error(RED, "NS: $ns != $dir");
+        return -1;
+    }
+    return 1;
+}
+    
+sub error {
+    print @_, CLEAR, "\n";
+}
-- 
cgit v1.1