diff options
Diffstat (limited to 'tests/ctest_pretty_print.py')
-rwxr-xr-x | tests/ctest_pretty_print.py | 254 |
1 files changed, 0 insertions, 254 deletions
diff --git a/tests/ctest_pretty_print.py b/tests/ctest_pretty_print.py deleted file mode 100755 index 430f106..0000000 --- a/tests/ctest_pretty_print.py +++ /dev/null @@ -1,254 +0,0 @@ -#!/usr/bin/python -import string,platform,sys,re,os - -wiki_basepath = 'OpenSCAD' -logfilename = 'LastTest.log' -builddir = os.getcwd() -logpath = os.path.join(builddir,'Testing','Temporary',logfilename) -NO_END = False -if logfilename.endswith('.tmp'): NO_END = True - -def read_sysinfo(): - try: - f=open('sysinfo.txt') - except: - return '' - data=f.read() - machine_str, osplain_str, renderer_str = '','','' - machine = re.search('Machine:(.*?)\n',data) - osinfo = re.search('OS info:(.*?)\n',data) - renderer = re.search('GL Renderer:(.*?)\n',data) - if machine: machine_str = machine.group(1).strip().replace(' ','-').replace('/','-') - if osinfo: - osplain_str = osinfo.group(1).strip().split(' ')[0].strip().replace('/','-') - if 'windows' in osinfo.group(1).lower(): osplain_str = 'win' - if renderer: - tmp = renderer.group(1).strip().split(' ') - tmp = string.join(tmp[0:3],'-') - if '/' in tmp: tmp = tmp.split('/')[0] - renderer_str = tmp - platform = osplain_str + '_' + machine_str + '_' + renderer_str - platform = platform.lower() - return data, platform - -def readlog(): - try: - print 'reading',logpath - f = open(logpath) - except: - print 'couldnt open ',logpath - return None - - data = f.read() - return data - -class Test: - def __init__(self,fullname,time,passed,output,type,outputfile,expectedfile): - self.fullname,self.time,self.passed,self.output = \ - fullname, time, passed, output - self.type = type - self.outputfile = outputfile - self.expectedfile = expectedfile - - def __str__(self): - x = 'fullname: ' + self.fullname - x+= '\noutputfile: ' + self.outputfile - x+= '\nexpectedfile: ' + self.expectedfile - x+= '\ntesttime: ' + self.time - x+= '\ntesttype: ' + self.type - x+= '\npassfail: ' + self.passfail - x+= '\noutput: \n' + self.output - x+= '\n' - return x - -def gettest_strings(data): - chunks = data.split('----------------------------------------------------------') - print 'read',len(chunks), 'chunks' - if NO_END: - enddate = 'n/a (cancelled)' - chunks.pop() - else: - enddate = chunks.pop().replace('End testing: ','').strip() - chunks.reverse() - startdate = chunks.pop().replace('Start testing: ','').strip() - chunks.reverse() - tests=[] - chunksize = 3 - for i in range(0,len(chunks),chunksize): - testchunks = chunks[i:i+chunksize] - test = string.join(testchunks,'-----') - tests += [test] - #print '----------<<<<<<<<<<<<<<<<' - #print test - #print '----------<<<<<<<<<<<<<<<<' - test = '' - sysinfo, platform = read_sysinfo() - return startdate, tests, enddate, sysinfo, platform - -def parsetest(teststring): - s = teststring - def regex(pat,str): - x=re.search(pat,str,re.DOTALL|re.MULTILINE) - if x: - if len(x.groups())>0: - return x.group(1).strip() - return '' - testfullname = regex("Test:(.*?)\n",s) - testtime = regex("Test time =(.*?)\n",s).replace(' sec','') - passfail = regex("Test time.*?Test (Passed)",s) - command = regex("Command:(.*?)\n",s) - tmp = command.split(' "') - testtype = '' - try: - testtype = tmp[3].strip('"') - except: - print 'failed to parse log', teststring - goodimg = regex("expected image:(.*?)\n",s) - actualimg = regex("actual image:(.*?)\n",s) - if passfail=='Passed': passed = True - else: passed = False - output = regex("Output:(.*?)<end of output>",s).replace('-----','') - test = Test(testfullname, testtime, passed, output, testtype, actualimg, goodimg ) - return test - -def parse(data): - startdate, test_strs, enddate, sysinfo, platform = gettest_strings(data) - print 'found', len(test_strs),'test results' - tests = [] - for i in range(len(test_strs)): - test = parsetest(test_strs[i]) - tests += [test] - return startdate, tests, enddate, sysinfo, platform - -def towiki(startdate, tests, enddate, sysinfo, platform): - def convert_path(fulltestname,platform,path): - # convert system path name (image file) to wiki path name - testprogram = fulltestname[0:fulltestname.rfind('_')] - testprogram = testprogram.replace('test','') - filename = os.path.basename(path) - filename = filename.replace('-tests-actual.png','.png') - filename = filename.replace('-tests-expected.png','.png') - try: - platform = platform[0].upper() + platform[1:] - except: - platform = 'error' - newpath = testprogram + '_' + filename - # must use _ not / b/c of wikinet.org weird name mangling - newpath = wiki_basepath + '_' + platform + '_' + newpath - return newpath - - x=''' -<h3>OpenSCAD test run</h3> - -platform: PLATFORM - -detailed system info: -<pre> -SYSINFO -</pre> - -start time: STARTDATE -end time : ENDDATE - -Failed tests - -{|TABLESTYLE -! Testname !! expected output !! actual output -|- -| FTESTNAME || [[File:EXPECTEDIMG|thumb|250px]] || [[File:ACTUALIMG|thumb|250px]] -|} - -Passed tests - -{|TABLESTYLE -! Testname -|- -| PTESTNAME -|} - -''' - - repeat1=''' -|- -| FTESTNAME || [[File:EXPECTEDIMG|thumb|250px]] || [[File:ACTUALIMG|thumb|250px]] -''' - - repeat2=''' -|- -| PTESTNAME -''' - - x = x.replace('TABLESTYLE','border=1 cellspacing=0 cellpadding=1 align="center"') - x = x.replace('STARTDATE',startdate) - x = x.replace('ENDDATE',enddate) - x = x.replace('SYSINFO',sysinfo) - x = x.replace('PLATFORM',platform) - - for t in tests: - print t.type, t.fullname, t.expectedfile, t.outputfile - if t.passed: - tmp = str(repeat2) - tmp = tmp.replace('PTESTNAME',t.fullname) - x = x.replace(repeat2,tmp + repeat2) - elif not t.passed and t.type=='png': - tmp = str(repeat1) - tmp = tmp.replace('FTESTNAME',t.fullname) - - wiki_imgpath1 = convert_path(t.fullname,'expected',t.expectedfile) - if t.type!='png': wiki_imgpath1 = '' - if t.expectedfile=='': wiki_imgpath2 = '' - tmp = tmp.replace('EXPECTEDIMG',wiki_imgpath1) - - wiki_imgpath2 = convert_path(t.fullname,platform,t.outputfile) - if t.type!='png': wiki_imgpath2 = '' - if t.outputfile=='': wiki_imgpath2 = '' - tmp = tmp.replace('ACTUALIMG',wiki_imgpath2) - - x = x.replace(repeat1,tmp + repeat1) - - x = x.replace(repeat1,'') - x = x.replace(repeat2,'') - return x - -def wikitohtml(data): - # not pretty - data = data.replace('\n\n','\n<p>\n') - data = re.sub('\{\|.*?\n','<table border=1>\n',data) - data = re.sub('\n\! ','\n<tr>\n<td>',data) - data = data.replace(' !! ','<td>') - data = data.replace('|-','<tr>') - data = re.sub('\n\| ','\n<td>',data) - data = data.replace(' || ','<td>') - data = data.replace('|}','\n</table>') - data = re.sub('[[File:(.*?)|.*?]]','<img src="(\1)">',data) - return data - -def testsort(tests): - passed = [] - failed = [] - for t in tests: - if t.passed: passed+=[t] - else: failed +=[t] - return failed+passed - -def save(data,filename): - try: - f=open(filename,'w') - except: - print 'couldnt open ',filename, 'for writing' - return None - print 'writing',len(data),'bytes to',filename - f.write(data) - f.close() - -def main(): - data = readlog() - startdate, tests, enddate, sysinfo, platform = parse(data) - tests = testsort(tests) - wikidata = towiki(startdate, tests, enddate, sysinfo, platform) - htmldata = wikitohtml(wikidata) - save(wikidata, platform+'.wiki') - save(htmldata, platform+'.html') - -main() - |