--- /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