Home | History | Annotate | Download | only in scripts
      1 import re
      2 import sys
      3 from xml.dom.minidom import Document
      4 
      5 class TestCase:
      6 	def __init__(self, casePath, description, caseType):
      7 		self.casePath		= casePath
      8 		self.description	= description
      9 		self.caseType		= caseType
     10 		self.children		= []
     11 
     12 def findAllMatches(haystack, needle):
     13 	matches = []
     14 	ndx = -1
     15 	while True:
     16 		ndx = haystack.find(needle, ndx+1)
     17 		if (ndx == -1):
     18 			break
     19 		matches.append(ndx)
     20 	return matches
     21 
     22 def createAncestors(casePath):
     23 	parentCase = None
     24 	for dotNdx in findAllMatches(casePath, "."):
     25 		ancestorPath = casePath[:dotNdx]
     26 		if ancestorPath not in caseNameHash:
     27 			case = TestCase(ancestorPath, "Test Group", "TestGroup")
     28 			parentCase.children.append(case)
     29 			caseNameHash[ancestorPath] = case
     30 			parentCase = case
     31 		parentCase = caseNameHash[ancestorPath]
     32 	return parentCase
     33 
     34 def exportCase (doc, parent, testCase):
     35 	#print testCase.name, testCase.caseType
     36 	element = doc.createElement("TestCase")
     37 	element.setAttribute("Name", testCase.casePath.rsplit(".", 2)[-1])
     38 	element.setAttribute("Description", testCase.description)
     39 	element.setAttribute("CaseType", testCase.caseType)
     40 	parent.appendChild(element)
     41 	for child in testCase.children:
     42 		exportCase(doc, element, child)
     43 
     44 # Main.
     45 
     46 packageName = sys.argv[1]
     47 
     48 rootCase = TestCase(packageName, packageName, "TestPackage" )
     49 caseNameHash = { packageName:rootCase }
     50 caseRE = re.compile(r"^\s*([a-zA-Z0-9_\.\-]+) '([^']*)' (\w+)\s*$".replace(" ", r"\s+"))
     51 
     52 lines = open(packageName + ".cases").readlines()
     53 numMatches = 0
     54 for line in lines:
     55 	line = line[:-1]
     56 	if line.startswith(packageName + "."):
     57 		m = caseRE.match(line)
     58 		if m:
     59 			casePath	= m.group(1)
     60 			description	= m.group(2)
     61 			caseType	= m.group(3)
     62 			parent = createAncestors(casePath)
     63 			parent.children.append(TestCase(casePath, description, caseType))
     64 			numMatches += 1
     65 
     66 # Create XML document.
     67 doc = Document()
     68 element = doc.createElement("TestCaseList")
     69 doc.appendChild(element)
     70 for testCase in rootCase.children:
     71 	exportCase(doc, element, testCase)
     72 
     73 # Dump XML document.
     74 xml = doc.toprettyxml(indent="  ")
     75 open(packageName + "-cases.xml", "wt").write(xml)
     76 
     77 print "%d cases converted." % numMatches
     78 
     79