import xml.etree.cElementTree as ElementTree
import xml.dom.minidom as minidom
-APK_NAME = "com.drawelements.deqp.apk"
+APK_NAME = "com.drawelements.deqp.apk"
GENERATED_FILE_WARNING = """
This file has been automatically generated. Edit with caution.
self.copyright = copyright
class Configuration:
- def __init__ (self, name, filters, glconfig = None, rotation = None, surfacetype = None):
- self.name = name
- self.glconfig = glconfig
- self.rotation = rotation
- self.surfacetype = surfacetype
- self.filters = filters
+ def __init__ (self, name, filters, glconfig = None, rotation = None, surfacetype = None, required = False, runtime = None):
+ self.name = name
+ self.glconfig = glconfig
+ self.rotation = rotation
+ self.surfacetype = surfacetype
+ self.required = required
+ self.filters = filters
+ self.expectedRuntime = runtime
class Package:
def __init__ (self, module, configurations):
reparsed = minidom.parseString(uglyString)
return reparsed.toprettyxml(indent='\t', encoding='utf-8')
-def genCTSPackageXML (mustpass, package, root):
- def isLeafGroup (testGroup):
- numGroups = 0
- numTests = 0
-
- for child in testGroup.children:
- if isinstance(child, TestCase):
- numTests += 1
- else:
- numGroups += 1
-
- assert numGroups + numTests > 0
-
- if numGroups > 0 and numTests > 0:
- die("Mixed groups and cases in %s" % testGroup.name)
-
- return numGroups == 0
-
- def makeConfiguration (parentElem, config):
- attributes = {}
-
- if config.glconfig != None:
- attributes['glconfig'] = config.glconfig
-
- if config.rotation != None:
- attributes['rotation'] = config.rotation
-
- if config.surfacetype != None:
- attributes['surfacetype'] = config.surfacetype
-
- return ElementTree.SubElement(parentElem, "TestInstance", attributes)
-
- def makeTestCase (parentElem, testCase):
- caseElem = ElementTree.SubElement(parentElem, "Test", name=testCase.name)
- for config in testCase.configurations:
- makeConfiguration(caseElem, config)
- return caseElem
-
- def makeTestGroup (parentElem, testGroup):
- groupElem = ElementTree.SubElement(parentElem, "TestCase" if isLeafGroup(testGroup) else "TestSuite", name=testGroup.name)
- for child in testGroup.children:
- if isinstance(child, TestCase):
- makeTestCase(groupElem, child)
- else:
- makeTestGroup(groupElem, child)
- return groupElem
-
- pkgElem = ElementTree.Element("TestPackage",
- name = package.module.name,
- appPackageName = getCTSPackageName(package),
- testType = "deqpTest")
-
- pkgElem.set("xmlns:deqp", "http://drawelements.com/deqp")
- insertXMLHeaders(mustpass, pkgElem)
-
- glesVersion = getModuleGLESVersion(package.module)
-
- if glesVersion != None:
- pkgElem.set("deqp:glesVersion", str(glesVersion.encode()))
-
- for child in root.children:
- makeTestGroup(pkgElem, child)
-
- return pkgElem
-
def genSpecXML (mustpass):
mustpassElem = ElementTree.Element("Mustpass", version = mustpass.version)
insertXMLHeaders(mustpass, mustpassElem)
ElementTree.SubElement(parent, "option", name=optionName, value=optionValue)
def genAndroidTestXml (mustpass):
- INSTALLER_CLASS = "com.android.compatibility.common.tradefed.targetprep.ApkInstaller"
RUNNER_CLASS = "com.drawelements.deqp.runner.DeqpTestRunner"
configElement = ElementTree.Element("configuration")
- preparerElement = ElementTree.SubElement(configElement, "target_preparer")
- preparerElement.set("class", INSTALLER_CLASS)
- addOptionElement(preparerElement, "cleanup-apks", "true")
- addOptionElement(preparerElement, "test-file-name", APK_NAME)
for package in mustpass.packages:
for config in package.configurations:
if config.rotation != None:
addOptionElement(testElement, "deqp-screen-rotation", config.rotation)
+ if config.expectedRuntime != None:
+ addOptionElement(testElement, "runtime-hint", config.expectedRuntime)
+
+ if config.required:
+ addOptionElement(testElement, "deqp-config-required", "true")
+
insertXMLHeaders(mustpass, configElement)
return configElement
patternLists = readPatternLists(mustpass)
for package in mustpass.packages:
- allCasesInPkg = moduleCaseLists[package.module]
- matchingByConfig = {}
- allMatchingSet = set()
+ allCasesInPkg = moduleCaseLists[package.module]
for config in package.configurations:
filtered = applyFilters(allCasesInPkg, patternLists, config.filters)
print " Writing deqp caselist: " + dstFile
writeFile(dstFile, "\n".join(filtered) + "\n")
- matchingByConfig[config] = filtered
- allMatchingSet = allMatchingSet | set(filtered)
-
- allMatchingCases = [c for c in allCasesInPkg if c in allMatchingSet] # To preserve ordering
- root = buildTestHierachy(allMatchingCases)
- testCaseMap = buildTestCaseMap(root)
-
- for config in package.configurations:
- for case in matchingByConfig[config]:
- testCaseMap[case].configurations.append(config)
-
- # NOTE: CTS v2 does not need package XML files. Remove when transition is complete.
- packageXml = genCTSPackageXML(mustpass, package, root)
- xmlFilename = os.path.join(mustpass.project.path, mustpass.version, getCTSPackageName(package) + ".xml")
-
- print " Writing CTS caselist: " + xmlFilename
- writeFile(xmlFilename, prettifyXML(packageXml))
-
specXML = genSpecXML(mustpass)
specFilename = os.path.join(mustpass.project.path, mustpass.version, "mustpass.xml")