diff --git a/tools/extracttests.py b/tools/extracttests.py new file mode 100644 index 000000000..2a7be3385 --- /dev/null +++ b/tools/extracttests.py @@ -0,0 +1,176 @@ +#!/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'] +