159 lines
4.1 KiB
Python
159 lines
4.1 KiB
Python
import argparse
|
|
import string
|
|
|
|
class TestGroup:
|
|
def __init__(self, name, parent = None):
|
|
self.parent = parent
|
|
self.name = name
|
|
self.testGroups = []
|
|
self.testCases = []
|
|
|
|
if parent:
|
|
assert not parent.hasGroup(name)
|
|
parent.testGroups.append(self)
|
|
|
|
def getName (self):
|
|
return self.name
|
|
|
|
def getPath (self):
|
|
if self.parent:
|
|
return self.parent.getPath() + "." + self.name
|
|
else:
|
|
return self.name
|
|
|
|
def hasGroup(self, groupName):
|
|
for group in self.testGroups:
|
|
if group.getName() == groupName:
|
|
return True
|
|
return False
|
|
|
|
def getGroup(self, groupName):
|
|
for group in self.testGroups:
|
|
if group.getName() == groupName:
|
|
return group
|
|
assert False
|
|
|
|
def hasTest(self, testName):
|
|
for test in self.testCases:
|
|
if test.getName() == testName:
|
|
return True
|
|
return False
|
|
|
|
def getTest(self, testName):
|
|
for test in self.testCases:
|
|
if test.getName() == testName:
|
|
return test
|
|
assert False
|
|
|
|
def hasTestCases(self):
|
|
return len(self.testCases) != 0
|
|
|
|
def hasTestGroups(self):
|
|
return len(self.testGroups) != 0
|
|
|
|
def getTestCases(self):
|
|
return self.testCases
|
|
|
|
def getTestGroups(self):
|
|
return self.testGroups
|
|
|
|
class TestCase:
|
|
def __init__(self, name, parent):
|
|
self.name = name
|
|
self.parent = parent
|
|
|
|
assert not parent.hasTest(name)
|
|
self.parent.testCases.append(self)
|
|
|
|
def getPath (self):
|
|
return self.parent.getPath() + "." + self.name
|
|
|
|
def getName(self):
|
|
return self.name
|
|
|
|
def addTestToHierarchy(rootGroup, path):
|
|
pathComponents = string.split(path, ".")
|
|
currentGroup = rootGroup
|
|
|
|
assert pathComponents[0] == rootGroup.getName()
|
|
|
|
for i in range(1, len(pathComponents)):
|
|
component = pathComponents[i]
|
|
|
|
if i == len(pathComponents) - 1:
|
|
TestCase(component, currentGroup)
|
|
else:
|
|
if currentGroup.hasGroup(component):
|
|
currentGroup = currentGroup.getGroup(component)
|
|
else:
|
|
currentGroup = TestGroup(component, parent=currentGroup)
|
|
|
|
def loadTestHierarchy (input, packageName):
|
|
line = input.readline()
|
|
rootGroup = None
|
|
|
|
if line.startswith(packageName + "."):
|
|
groupName = packageName
|
|
rootGroup = TestGroup(groupName)
|
|
else:
|
|
print(line)
|
|
assert False
|
|
|
|
for line in input:
|
|
addTestToHierarchy(rootGroup, line.strip());
|
|
|
|
return rootGroup
|
|
|
|
def writeAndroidCTSTest(test, output):
|
|
output.write('<Test name="%s" />\n' % test.getName())
|
|
|
|
def writeAndroidCTSTestCase(group, output):
|
|
assert group.hasTestCases()
|
|
assert not group.hasTestGroups()
|
|
|
|
output.write('<TestCase name="%s">\n' % group.getName())
|
|
|
|
for testCase in group.getTestCases():
|
|
writeAndroidCTSTest(testCase, output)
|
|
|
|
output.write('</TestCase>\n')
|
|
|
|
def writeAndroidCTSTestSuite(group, output):
|
|
if group.getName() == "performance":
|
|
return;
|
|
|
|
output.write('<TestSuite name="%s">\n' % group.getName())
|
|
|
|
for childGroup in group.getTestGroups():
|
|
if group.getName() == "performance":
|
|
continue;
|
|
|
|
if childGroup.hasTestCases():
|
|
assert not childGroup.hasTestGroups()
|
|
writeAndroidCTSTestCase(childGroup, output)
|
|
elif childGroup.hasTestGroups():
|
|
writeAndroidCTSTestSuite(childGroup, output)
|
|
# \note Skips groups without testcases or child groups
|
|
|
|
output.write('</TestSuite>\n')
|
|
|
|
def writeAndroidCTSFile(rootGroup, output, name, appPackageName):
|
|
output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
|
|
output.write('<TestPackage name="%s" appPackageName="%s" testType="deqpTest">\n' % (name, appPackageName))
|
|
|
|
writeAndroidCTSTestSuite(rootGroup, output)
|
|
|
|
output.write('</TestPackage>\n')
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('input', type=argparse.FileType('r'), help="Input file containing dEQP test names.")
|
|
parser.add_argument('output', type=argparse.FileType('w'), help="Output file for Android CTS test file.")
|
|
parser.add_argument('--name', dest="name", type=str, required=True, help="Name of the test package")
|
|
parser.add_argument('--package', dest="package", type=str, required=True, help="Name of the app package")
|
|
|
|
args = parser.parse_args()
|
|
|
|
rootGroup = loadTestHierarchy(args.input, args.name)
|
|
writeAndroidCTSFile(rootGroup, args.output, name=args.name, appPackageName=args.package)
|