diff options
Diffstat (limited to 'tests/test_cmdline_tool.py')
-rwxr-xr-x | tests/test_cmdline_tool.py | 79 |
1 files changed, 74 insertions, 5 deletions
diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py index b8a0d07..b6afbec 100755 --- a/tests/test_cmdline_tool.py +++ b/tests/test_cmdline_tool.py @@ -24,6 +24,8 @@ import glob import subprocess import re import getopt +import shutil +import platform def initialize_environment(): if not options.generate: options.generate = bool(os.getenv("TEST_GENERATE")) @@ -43,8 +45,15 @@ def verify_test(testname, cmd): return True def execute_and_redirect(cmd, params, outfile): - proc = subprocess.Popen([cmd] + params, stdout=outfile) - retval = proc.wait() + retval = -1 + try: + proc = subprocess.Popen([cmd] + params, stdout=outfile) + retval = proc.wait() + except: + print >> sys.stderr, "Error running subprocess: ", sys.exc_info()[1] + print >> sys.stderr, " cmd:", cmd + print >> sys.stderr, " params:", params + print >> sys.stderr, " outfile:", outfile return retval def get_normalized_text(filename): @@ -60,8 +69,56 @@ def compare_default(resultfilename): return False return True +def append_html_output(expectedfilename, resultfilename): + # 1 if html directory & file not there, create them + # 2 copy expected filename image and result filename image to dir + # 3 append html to show differences + # 4 dump platform.platform() + expectedimg = os.path.basename(expectedfilename) + resultimg = os.path.basename(resultfilename) + template = ''' +<p> +<div style="border:1px solid gray;padding:10px;"> +Test command: <b>///TESTCMD///</b> Test name: <b>///TESTNAME///</b> <br/> + <div style="float: left; width: 50%;"> + <br/> + Expected:<br/> + <img style="border:1px solid gray; width:90%;" src="///EXPECTED///"/> + </div> + + <div style="float: right; width: 50%;"> + Actual:<br/> + (Platform: ///PLATFORM///)<br/> + <img style="border:1px solid gray; width:90%;" src="///RESULT///"/> + </div> +<br style="clear:both;"/> +</div> +<p> +''' + html = template + html = html.replace('///EXPECTED///',expectedimg) + html = html.replace('///RESULT///',resultimg) + html = html.replace('///TESTCMD///',os.path.basename(options.cmd)) + html = html.replace('///TESTNAME///',options.testname) + html = html.replace('///PLATFORM///',platform.platform()) + try: + shutil.copy(expectedfilename,options.imgdiff_dir) + shutil.copy(resultfilename,options.imgdiff_dir) + f = open(options.imgdiff_htmlfile,'a') + f.write(html) + f.close() + print >> sys.stderr, "appended " + options.imgdiff_htmlfile + except: + print >> sys.stderr, "error appending " + options.imgdiff_htmlfile + print >> sys.stderr, sys.exc_info() + def compare_png(resultfilename): - if execute_and_redirect("diff", [expectedfilename, resultfilename], sys.stderr) != 0: + if not resultfilename: + print >> sys.stderr, "Error: OpenSCAD did not generate an image" + return False + print >> sys.stderr, 'Yee image compare: ', expectedfilename, ' ', resultfilename + if execute_and_redirect("./yee_compare", [expectedfilename, resultfilename, "-downsample", "2", "-threshold", "200"], sys.stderr) != 0: + append_html_output(expectedfilename, resultfilename) return False return True @@ -76,6 +133,7 @@ def run_test(testname, cmd, args): outputdir = os.path.join(os.getcwd(), cmdname + "-output") actualfilename = os.path.join(outputdir, testname + "-actual." + options.suffix) + actualfilename = os.path.normpath(actualfilename) if options.generate: if not os.path.exists(expecteddir): os.makedirs(expecteddir) @@ -83,9 +141,11 @@ def run_test(testname, cmd, args): else: if not os.path.exists(outputdir): os.makedirs(outputdir) outputname = actualfilename + outputname = os.path.normpath( outputname ) + outfile = open(outputname, "wb") try: - proc = subprocess.Popen([cmd] + args, stdout=outfile, stderr=subprocess.PIPE) + proc = subprocess.Popen([cmd] + args + [outputname], stdout=subprocess.PIPE, stderr=subprocess.PIPE) errtext = proc.communicate()[1] if errtext != None and len(errtext) > 0: print >> sys.stderr, "Error output: " + errtext @@ -127,6 +187,15 @@ if __name__ == '__main__': options.regressiondir = os.path.join(os.path.split(sys.argv[0])[0], "regression") options.generate = False options.suffix = "txt" + + options.imgdiff_dir = 'imgdiff-fail' + options.imgdiff_htmlfile = os.path.join(options.imgdiff_dir,'failed.html') + try: + if not os.path.isdir(options.imgdiff_dir): + os.mkdir(options.imgdiff_dir) + except: + print >> sys.stderr, "error creating " + options.imgdiff_dir, sys.exc_info() + for o, a in opts: if o in ("-g", "--generate"): options.generate = True elif o in ("-s", "--suffix"): @@ -134,7 +203,7 @@ if __name__ == '__main__': else: options.suffix = a elif o in ("-t", "--test"): options.testname = a - + # <cmdline-tool> and <argument> if len(args) < 2: usage() |