liyujie
2025-08-28 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#-------------------------------------------------------------------------
# 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