srcanamdw/codescanner/renderers_poc/renderer.py
changeset 1 22878952f6e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srcanamdw/codescanner/renderers_poc/renderer.py	Thu Feb 18 12:29:02 2010 +0530
@@ -0,0 +1,155 @@
+# #################################################################
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# 
+# 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 Nokia Corporation 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR 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.#
+#
+# #################################################################
+#!/usr/bin/python
+
+
+# experimentation
+
+# #############################################################
+class CRendererBase:
+    def RegisterSelf( self, aName, aDescription, aRendererManager ):
+        self.iName = aName
+        self.iDescription = aDescription
+        aRendererManager.AddRenderer( self )
+        
+    def DoBeginTest( self, aTestName ):
+        return
+
+    def DoEndTest( self, aTestName ):
+        return
+
+    def DoReportError( self, aFile, aLine, aResult ):
+        return
+
+    iName = "CRendererBase!"
+    iDescription = ""
+
+
+class CRendererManager:
+    def __init__( self ):
+        # declare associative list of renderers
+        self.iRendererList = {}
+
+    def AddRenderer( self, aRenderer ):
+        self.iRendererList[ aRenderer.iName ] = aRenderer
+        print( "Added " + aRenderer.iName )
+
+    def ListRenderers( self ):
+        print( "Renderers:" )        
+        for name, renderer in self.iRendererList.items():
+            print( "\t" + name + "\t" + renderer.iDescription  )
+
+        print( "" )
+
+
+    def BeginTest( self, aTestName ):
+        for name, renderer in self.iRendererList.items():
+            renderer.DoBeginTest( aTestName )
+
+    def EndTest( self, aTestName ):
+        for name, renderer in self.iRendererList.items():
+            renderer.DoEndTest( aTestName )
+
+    def ReportError( self, aFile, aLine, aResult ):
+        for name, renderer in self.iRendererList.items():
+            renderer.DoReportError( aFile, aLine, aResult )
+
+
+# #############################################################
+
+
+# renderers are to be dropped in arbitarily, much like test scripts, images and embedded files
+# rest of linescanners uses them via the RendererManager instance.
+
+# #############################################################
+class CHtmlRenderer( CRendererBase ):
+    def __init__( self, aRendererManager ):
+        self.RegisterSelf( "html", "Classic CodeScanner browsable HTML tree", aRendererManager )
+        
+    def DoBeginTest( self, aTestName ):
+        self.iFileHandle = open( aTestName + ".html", "w" )
+        self.iFileHandle.write( "<html>\n<body>\n<h1>" + aTestName + "</h1>\n" )
+
+    def DoEndTest( self, aTestName ):
+        self.iFileHandle.write( "</body>\n</html>\n" )
+        self.iFileHandle.close()
+
+    def DoReportError( self, aFile, aLine, aResult ):
+        self.iFileHandle.write( "<i>" + aResult + "</i> at " + str( aLine ) + "<br/>\n" )
+
+# #############################################################
+
+
+
+# #############################################################
+class CMsdevRenderer( CRendererBase ):
+    def __init__( self, aRendererManager ):
+        self.RegisterSelf( "msdev", "Classic MIScan plugin for MSDEV", aRendererManager )
+
+    def DoBeginTest( self, aTestName ):
+        self.iErrorCount = 0
+        return
+    
+    def DoEndTest( self, aTestName ):
+        print( "\n\n" + str( self.iErrorCount ) + " total errors" )
+        return
+    
+    def DoReportError( self, aFile, aLine, aResult ):
+        self.iErrorCount += 1
+        # :\Series60Ex\menu\src\aknexmenusubcontainer.cpp(126) : warning: to do comment
+        print( aFile + "(" + str( aLine ) + ") : " + aResult )
+    
+
+# #############################################################
+
+# objects register themselves with rendererManager
+rendererManager = CRendererManager()
+
+CHtmlRenderer( rendererManager )
+CMsdevRenderer( rendererManager )
+
+rendererManager.ListRenderers()
+
+
+errorCasesFiles = [ "moose.cpp",
+                    "lama.cpp",
+                    "underflow.cpp",
+                    "wankers.cpp" ]
+
+errorCasesLines = [ 56,
+                    23,
+                    67,
+                    42 ]
+
+errorCasesMessages = [ "moose farmer in field",
+                       "lama shags sheep",
+                       "out of budget",
+                       "DELL are bad people" ]
+
+
+
+rendererManager.BeginTest( "arbitarytest case" )
+for file, line, error in zip( errorCasesFiles, errorCasesLines, errorCasesMessages ):
+    rendererManager.ReportError( file, line, error )
+
+rendererManager.EndTest( "test harness" )
+    
+
+
+
+