bthci/bthci2/CommandsEvents/generator/testserver.py
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bthci/bthci2/CommandsEvents/generator/testserver.py	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,154 @@
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import ConfigParser
+
+from datainput import getEntries, getFolded, getTypes
+from teststep import TestStep
+from time import strftime
+from utils import doTimeStampCompareAndWrite
+
+#
+# Creates test step from .ini file as used when creating commands and events.
+#
+
+def makeTestSteps(aCfg, aSections):
+    if aSections == []:
+        return []
+    else:
+        return makeTestStep(aCfg.get(aSections[0], 'Type'),
+                            getFolded(getEntries(aCfg.get(aSections[0], 'Datafile')), getTypes(aCfg.get(aSections[0], 'Typefile')), 0)) + makeTestSteps(aCfg, aSections[1:])
+
+#
+# Creates a test step from an entry as provided by the getFolded method.
+#
+
+def makeTestStep(aType, aEntries):
+    if len(aEntries) == 0:
+        return []
+    else:
+        key, value = aEntries.popitem()
+        return [TestStep(key, aType)] + makeTestStep(aType, aEntries)
+
+#
+# Makes a string of the form
+#
+# if(aStepName == KTestStepName1)
+#   {
+#   return new CTestStepName;
+#   }
+# else if(aStepName == KTestStepName2)
+#   {
+#    ....
+#
+# for every test name in the list provided.
+#
+
+def makeCreateTestStepImpl(aTestSteps):
+    impl_str = ''
+
+    for t in aTestSteps:
+        impl_str += 'if(aStepName == K' + t.teststepName() + ')\n\t\t{\n\t\treturn new C' + t.teststepName() + ';\n\t\t}\n\telse '
+
+    impl_str += '\n\t\t{\n\t\treturn NULL;\n\t\t}'
+    return impl_str
+
+#
+# Makes a string of the form '#include "teststepheaderfile.h"\n' for every test step in the list provided.
+#
+
+def makeTestStepHeaders(aTestSteps):
+    hdr_str = ''
+
+    for t in aTestSteps:
+        hdr_str += '#include "' + t.headerFile() + '"\n'
+
+    return hdr_str
+
+#
+# Returns a string for test step run instructions.
+#
+
+def makeTests(aName, aTestSteps):
+    scr_str = ''
+
+    for t in aTestSteps:
+        if t.isPanic(): # Test step will panic
+            scr_str += 'RUN_TEST_STEP !PanicCode=' + t.panicCode() + ' 100 ' + aName + ' ' + t.teststepName() + '\n' 
+        else:
+            scr_str += 'RUN_TEST_STEP 100 ' + aName + ' ' + t.teststepName() + '\n'
+
+    return scr_str
+
+#
+# Writes a test server with test script. Template substitutions are:
+#
+# For the source template:
+# $CREATE_TEST_STEP_IMPL: implementation of CreateTestStep method
+# $TEST_STEP_HEADERS: #include "teststep.h", include directive for all test step implementations
+# $SERVERNAME: test step server name, used for SetServerName
+# $CLASSNAME: test step server class name, of the form CTestStepServerName
+# $FILENAME: filename for test step server
+# $HEADERGUARD: the name of the server in capital letters, suitable for include guards
+# $GENERATE_TIME_STAMP: timestamp showing when the generator produced the file
+#
+# For the header template:
+# $CLASSNAME: test step server class name, of the form CTestStepServerName
+# $FILENAME: filename for test step server
+# $HEADERGUARD: the name of the server in capital letters, suitable for include guards
+# $GENERATE_TIME_STAMP: timestamp showing when the generator produced the file
+
+def writeTestServer(aName, aHeaderTemplate, aSourceTemplate, aScriptTemplate, aTestSteps, aPath):
+    cfg = ConfigParser.ConfigParser()
+    cfg.readfp(file(aTestSteps))
+
+    steps = makeTestSteps(cfg, cfg.sections())
+    
+    src = {'CREATE_TEST_STEP_IMPL': makeCreateTestStepImpl(steps),
+           'TEST_STEP_HEADERS': makeTestStepHeaders(steps),
+           'SERVERNAME': aName,
+           'CLASSNAME': 'C' + aName,
+           'FILENAME': aName.lower(),
+           'HEADERGUARD': aName.upper(),
+           'GENERATE_TIME_STAMP': strftime("%a, %d %b %Y %H:%M:%S") + ' (time stamp)'}
+    
+    hdr = {'CLASSNAME': 'C' + aName,
+           'FILENAME': aName.lower(),
+           'HEADERGUARD': aName.upper(),
+           'GENERATE_TIME_STAMP': strftime("%a, %d %b %Y %H:%M:%S") + ' (time stamp)'}
+
+    #file(aPath + '\\' + hdr['FILENAME'] + '.h', 'w+').write(aHeaderTemplate.substitute(hdr))
+    #file(aPath + '\\' + src['FILENAME'] + '.cpp', 'w+').write(aSourceTemplate.substitute(src))
+    doTimeStampCompareAndWrite(aPath + '\\' + hdr['FILENAME'] + '.h', aHeaderTemplate.substitute(hdr))
+    doTimeStampCompareAndWrite(aPath + '\\' + src['FILENAME'] + '.cpp', aSourceTemplate.substitute(src))
+
+    writeTestScripts(aName, aScriptTemplate, steps, aPath)
+
+#
+# Writes test scripts. Template substitutions:
+# $FILENAME: name of script file to write
+# $TESTSERVERNAME: name of test server to load
+# $TESTS: calls to test steps, of the form RUN...
+# $GENERATE_TIME_STAMP: timestamp showing when the generator produced the file
+#
+
+def writeTestScripts(aName, aScriptTemplate, aTestSteps, aPath):
+    script = {'FILENAME': aName.lower(),
+              'TESTSERVERNAME': aName,
+              'TESTS': makeTests(aName, aTestSteps),
+              'GENERATE_TIME_STAMP': strftime("%a, %d %b %Y %H:%M:%S") + ' (time stamp)'}
+    
+    #file(aPath + '\\' + script['FILENAME'] + '.script', 'w+').write(aScriptTemplate.substitute(script))
+    doTimeStampCompareAndWrite(aPath + '\\' + script['FILENAME'] + '.script', aScriptTemplate.substitute(script))
\ No newline at end of file