| #------------------------------------------------------------------------- |
| # drawElements Quality Program utilities |
| # -------------------------------------- |
| # |
| # Copyright 2015 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| #------------------------------------------------------------------------- |
| |
| import re |
| import sys |
| from xml.dom.minidom import Document |
| |
| class TestCase: |
| def __init__(self, casePath, description, caseType): |
| self.casePath = casePath |
| self.description = description |
| self.caseType = caseType |
| self.children = [] |
| |
| def findAllMatches(haystack, needle): |
| matches = [] |
| ndx = -1 |
| while True: |
| ndx = haystack.find(needle, ndx+1) |
| if (ndx == -1): |
| break |
| matches.append(ndx) |
| return matches |
| |
| def createAncestors(casePath): |
| parentCase = None |
| for dotNdx in findAllMatches(casePath, "."): |
| ancestorPath = casePath[:dotNdx] |
| if ancestorPath not in caseNameHash: |
| case = TestCase(ancestorPath, "Test Group", "TestGroup") |
| parentCase.children.append(case) |
| caseNameHash[ancestorPath] = case |
| parentCase = case |
| parentCase = caseNameHash[ancestorPath] |
| return parentCase |
| |
| def exportCase (doc, parent, testCase): |
| #print(testCase.name, testCase.caseType) |
| element = doc.createElement("TestCase") |
| element.setAttribute("Name", testCase.casePath.rsplit(".", 2)[-1]) |
| element.setAttribute("Description", testCase.description) |
| element.setAttribute("CaseType", testCase.caseType) |
| parent.appendChild(element) |
| for child in testCase.children: |
| exportCase(doc, element, child) |
| |
| # Main. |
| |
| packageName = sys.argv[1] |
| |
| rootCase = TestCase(packageName, packageName, "TestPackage" ) |
| caseNameHash = { packageName:rootCase } |
| caseRE = re.compile(r"^\s*([a-zA-Z0-9_\.\-]+) '([^']*)' (\w+)\s*$".replace(" ", r"\s+")) |
| |
| lines = open(packageName + ".cases").readlines() |
| numMatches = 0 |
| for line in lines: |
| line = line[:-1] |
| if line.startswith(packageName + "."): |
| m = caseRE.match(line) |
| if m: |
| casePath = m.group(1) |
| description = m.group(2) |
| caseType = m.group(3) |
| parent = createAncestors(casePath) |
| parent.children.append(TestCase(casePath, description, caseType)) |
| numMatches += 1 |
| |
| # Create XML document. |
| doc = Document() |
| element = doc.createElement("TestCaseList") |
| doc.appendChild(element) |
| for testCase in rootCase.children: |
| exportCase(doc, element, testCase) |
| |
| # Dump XML document. |
| xml = doc.toprettyxml(indent=" ") |
| open(packageName + "-cases.xml", "wt").write(xml) |
| |
| print("%d cases converted." % numMatches) |
| |