#!/usr/bin/python import sys import re class Extract: nodes = [] def parseFile(self,filename): name = '[0-9a-zA-Z_]+' str = '\\"(.+)\\"' testclass = None functionName = None fin = open(filename, 'r') for line in fin: # testclass starts res = re.match('class ('+name+')', line) if res != None: testclass = res.group(1) # end of testclass if re.match('};', line) != None: testclass = None # function start res = re.match('\\s+void ('+name+')\\(\\)', line) if res != None: functionName = res.group(1) elif re.match('\\s+}', line) != None: functionName = None if functionName == None: continue # check res = re.match('\s+check\('+str, line) if res != None: code = res.group(1) # code.. res = re.match('\\s+'+str, line) if res != None: code = code + res.group(1) # assert res = re.match('\\s+ASSERT_EQUALS\\(\\"(.*)\\"', line) if res != None and len(code) > 10: node = { 'testclass':testclass, 'functionName':functionName, 'code':code, 'expected':res.group(1) } self.nodes.append(node) code = '' def strtoxml(s): return s.replace('&','&').replace('"', '"').replace('<','<').replace('>','>') # parse command line xml = False filename = None htmldir = None i = 1 while i < len(sys.argv): if sys.argv[i] == '--xml': xml = True elif sys.argv[i].startswith('--html='): arg = sys.argv[i] htmldir = arg[7:] else: filename = sys.argv[i] i = i + 1 # extract test cases if filename != None: # parse test file e = Extract() e.parseFile(filename) # generate output if xml: print '' print '' count = 0 for node in e.nodes: s = ' ' elif htmldir != None: if not htmldir.endswith('/'): htmldir += '/' findex = open(htmldir + 'index.htm', 'w') findex.write('\n') findex.write('\n') findex.write(' \n') findex.write('\n') findex.write('\n') findex.write('

' + filename + '

\n') functionNames = [] for node in e.nodes: functionname = node['functionName'] while functionname[-1].isdigit(): functionname = functionname[:-1] if functionname[-1] == '_': functionname = functionname[:-1] if not functionname in functionNames: functionNames.append(functionname) functionNames.sort() findex.write('\n') findex.write(' \n') for functionname in functionNames: findex.write(' ') num = 0 for node in e.nodes: name = node['functionName'] while name[-1].isdigit(): name = name[:-1] if name[-1] == '_': name = name[:-1] if name == functionname: num = num + 1 findex.write('\n') findex.write('
NameNumber
'+functionname+'
' + str(num) + '
\n') findex.write('') findex.close() # create files for each functionName for functionName in functionNames: fout = open(htmldir + functionName + '.htm', 'w') fout.write('\n') fout.write('\n') fout.write(' \n') fout.write('\n') fout.write('\n') fout.write('

' + node['testclass'] + '::' + functionName + '

') fout.write('\n') fout.write(' \n') num = 0 for node in e.nodes: name = node['functionName'] while name[-1].isdigit(): name = name[:-1] if name[-1] == '_': name = name[:-1] if name == functionName: num = num + 1 fout.write(' ') fout.write('') fout.write('') fout.write('\n') fout.write('
NrCodeExpected
' + str(num) + '
' + strtoxml(node['code']).replace('\\n', '\n') + '
' + strtoxml(node['expected']).replace('\\n', '
') + '
\n') fout.close() else: for node in e.nodes: print node['functionName']