Add GLES version attribute to CTS test descriptor XMLs for future use.
authorJarkko Pöyry <jpoyry@google.com>
Tue, 4 Nov 2014 01:05:37 +0000 (17:05 -0800)
committerJarkko Pöyry <jpoyry@google.com>
Tue, 4 Nov 2014 21:29:42 +0000 (13:29 -0800)
- Add "glesVersion" attribute to test package definition XML for future use.
- Add --module option to generator script to simplify test XML generation.
- Remove obsolete XML generation script.

Change-Id: I06ce86f3cd829d90727d2c1e459a1fcab92e268f

android/cts/com.drawelements.deqp.gles2.xml
android/cts/com.drawelements.deqp.gles3.xml
android/cts/com.drawelements.deqp.gles31.xml
android/scripts/GenAndroidCTSXML.py [deleted file]
android/scripts/gen_android_cts_xml.py [moved from android/scripts/GenAndroidCTSXMLFromTestList.py with 59% similarity]

index 308d6b1..4a9f9bb 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<TestPackage name="dEQP-GLES2" appPackageName="com.drawelements.deqp.gles2" testType="deqpTest">
+<TestPackage name="dEQP-GLES2" appPackageName="com.drawelements.deqp.gles2" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp" deqp:glesVersion="131072">
 <TestSuite name="dEQP-GLES2">
 <TestCase name="info">
 <Test name="vendor" />
index abf40d1..c588225 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<TestPackage name="dEQP-GLES3" appPackageName="com.drawelements.deqp.gles3" testType="deqpTest">
+<TestPackage name="dEQP-GLES3" appPackageName="com.drawelements.deqp.gles3" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp" deqp:glesVersion="196608">
 <TestSuite name="dEQP-GLES3">
 <TestCase name="info">
 <Test name="renderer" />
index 875bdd5..691a76c 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<TestPackage name="dEQP-GLES31" appPackageName="com.drawelements.deqp.gles31" testType="deqpTest">
+<TestPackage name="dEQP-GLES31" appPackageName="com.drawelements.deqp.gles31" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp" deqp:glesVersion="196609">
 <TestSuite name="dEQP-GLES31">
 <TestCase name="info">
 <Test name="renderer" />
diff --git a/android/scripts/GenAndroidCTSXML.py b/android/scripts/GenAndroidCTSXML.py
deleted file mode 100644 (file)
index 1f23a2c..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-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 name in parent.testGroups
-                       parent.testGroups[name] = 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):
-               return groupName in self.testGroups
-
-       def getGroup(self, groupName):
-               return self.testGroups[groupName]
-
-       def hasTest(self, testName):
-               return testName in self.testCases
-
-       def getTest(self, testName):
-               return self.testCases[testName]
-
-       def hasTestCases(self):
-               return len(self.testCases) != 0
-
-       def hasTestGroups(self):
-               return len(self.testGroups) != 0
-
-       def getTestCases(self):
-               return self.testCases.values()
-
-       def getTestGroups(self):
-               return self.testGroups.values()
-
-class TestCase:
-       def __init__(self, name, parent):
-               self.name = name
-               self.parent = parent
-
-               assert not name in self.parent.testCases
-               self.parent.testCases[name] = self
-
-       def getPath (self):
-               return self.parent.getPath() + "." + self.name
-
-       def getName(self):
-               return self.name
-
-def addGroupToHierarchy(rootGroup, path):
-       pathComponents = string.split(path, ".")
-       currentGroup = rootGroup
-
-       assert pathComponents[0] == rootGroup.getName()
-
-       for i in range(1, len(pathComponents)):
-               component = pathComponents[i]
-
-               if currentGroup.hasGroup(component):
-                       currentGroup = currentGroup.getGroup(component)
-               else:
-                       currentGroup = TestGroup(component, parent=currentGroup)
-
-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):
-       line = input.readline()
-       rootGroup = None
-
-       if line.startswith("GROUP: "):
-               groupName       = line[len("GROUP: "):-1]
-               rootGroup       = TestGroup(groupName)
-       else:
-               assert False
-
-       for line in input:
-               if line.startswith("GROUP: "):
-                       groupPath = line[len("GROUP: "):-1];
-                       addGroupToHierarchy(rootGroup, groupPath)
-               elif line.startswith("TEST: "):
-                       testPath = line[len("TEST: "):-1]
-                       addTestToHierarchy(rootGroup, testPath)
-               else:
-                       assert False
-
-       return rootGroup
-
-def hasFilteredCases(group, includeTests):
-    for child in group.getTestCases():
-        if child.getPath() in includeTests:
-            return True
-
-    for child in group.getTestGroups():
-        if hasFilteredCases(child, includeTests):
-            return True
-
-    return False
-
-def addFilteredTest(parent, group, includeTests):
-    for child in group.getTestGroups():
-        if hasFilteredCases(child, includeTests):
-            newChild = TestGroup(child.getName(), parent)
-            addFilteredTest(newChild, child, includeTests)
-
-    for child in group.getTestCases():
-        if child.getPath() in includeTests:
-            TestCase(child.getName(), parent)
-
-def filterTests(includeTests, group):
-    root = TestGroup(group.getName())
-
-    addFilteredTest(root, group, includeTests)
-
-    return root
-
-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):
-       output.write('<TestSuite name="%s">\n' % group.getName())
-
-       for childGroup in group.getTestGroups():
-               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, mustpass, name="dEQP-GLES3", appPackageName="com.drawelements.deqp.gles3"):
-       output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-       output.write('<TestPackage name="%s" appPackageName="%s" testType="deqpTest">\n' % (name, appPackageName))
-
-       writeAndroidCTSTestSuite(filterTests(mustpass, rootGroup), output)
-
-       output.write('</TestPackage>\n')
-
-if __name__ == "__main__":
-       parser = argparse.ArgumentParser()
-       parser.add_argument('input',        type=argparse.FileType('r'),        help="Input dEQP test hierarchy in txt format.")
-       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")
-       parser.add_argument('--must-pass',  dest="mustpass", type=argparse.FileType('r'), required=True, help="Must pass file")
-
-       args = parser.parse_args()
-
-       rootGroup = loadTestHierarchy(args.input)
-       writeAndroidCTSFile(rootGroup, args.output, name=args.name, appPackageName=args.package, mustpass=set(map(lambda x : x.rstrip(), args.mustpass.readlines())))
similarity index 59%
rename from android/scripts/GenAndroidCTSXMLFromTestList.py
rename to android/scripts/gen_android_cts_xml.py
index 5184c01..3bf894e 100644 (file)
@@ -1,6 +1,32 @@
 import argparse
 import string
 
+class ModuleTemplate:
+       def __init__(self, friendlyName, packageName, appPackageName, version):
+               self.friendlyName = friendlyName
+               self.packageName = packageName
+               self.appPackageName = appPackageName
+               self.version = version
+
+class GLESVersion:
+       def __init__(self, majorVersion, minorVersion):
+               self.majorVersion = majorVersion
+               self.minorVersion = minorVersion
+
+       def getCTSEncodedGLESVersion(self):
+               return (self.majorVersion << 16) | (self.minorVersion)
+
+class EGLVersion:
+       def getCTSEncodedGLESVersion(self):
+               return None
+
+MODULE_TEMPLATES = [
+       ModuleTemplate("egl",           "dEQP-EGL",             "com.drawelements.deqp.egl",    EGLVersion()),
+       ModuleTemplate("gles2",         "dEQP-GLES2",   "com.drawelements.deqp.gles2",  GLESVersion(2, 0)),
+       ModuleTemplate("gles3",         "dEQP-GLES3",   "com.drawelements.deqp.gles3",  GLESVersion(3, 0)),
+       ModuleTemplate("gles31",        "dEQP-GLES31",  "com.drawelements.deqp.gles31", GLESVersion(3, 1)),
+]
+
 class TestGroup:
        def __init__(self, name, parent = None):
                self.parent = parent
@@ -137,22 +163,41 @@ def writeAndroidCTSTestSuite(group, output):
 
        output.write('</TestSuite>\n')
 
-def writeAndroidCTSFile(rootGroup, output, name, appPackageName):
+def writeAndroidCTSFile(rootGroup, output, name, appPackageName, optionalAttrs):
+       optAttrsStr = ""
+
+       for k in optionalAttrs.keys():
+               optAttrsStr += " " + k + "=\"" + str(optionalAttrs[k]) + "\""
+
        output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-       output.write('<TestPackage name="%s" appPackageName="%s" testType="deqpTest">\n' % (name, appPackageName))
+       output.write('<TestPackage name="%s" appPackageName="%s" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp"%s>\n' % (name, appPackageName, optAttrsStr))
 
        writeAndroidCTSTestSuite(rootGroup, output)
 
        output.write('</TestPackage>\n')
 
+def getTemplateNames():
+       return [template.friendlyName for template in MODULE_TEMPLATES]
+
+def getTemplateByName(name):
+       matching = [template for template in MODULE_TEMPLATES if template.friendlyName == name]
+
+       assert len(matching) == 1
+       return matching[0]
+
 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")
+       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('--module',       dest="module",      type=str,                       required=True, help="Name of the test module", choices=getTemplateNames())
 
        args = parser.parse_args()
 
-       rootGroup = loadTestHierarchy(args.input, args.name)
-       writeAndroidCTSFile(rootGroup, args.output, name=args.name, appPackageName=args.package)
+       moduleTemplate = getTemplateByName(args.module)
+
+       optAttrs = {};
+       if moduleTemplate.version.getCTSEncodedGLESVersion():
+               optAttrs["deqp:glesVersion"] = moduleTemplate.version.getCTSEncodedGLESVersion()
+
+       rootGroup = loadTestHierarchy(args.input, moduleTemplate.packageName)
+       writeAndroidCTSFile(rootGroup, args.output, name=moduleTemplate.packageName, appPackageName=moduleTemplate.appPackageName, optionalAttrs=optAttrs)