blob: 5184c01aab5bae436fea31650edb43392ce04ed9 [file] [log] [blame]
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)