From cb6a27f469160aeeadc578952a51f2fcb1aa696d Mon Sep 17 00:00:00 2001 From: sliptonic Date: Thu, 6 Jul 2017 11:11:37 -0500 Subject: [PATCH] Path: simplify the test fixture Instead of creating a file from scratch, a test file is included. Post processing the file from the gui should give the same results as the test script. --- src/Mod/Path/CMakeLists.txt | 2 + src/Mod/Path/PathTests/TestPathPost.py | 87 ++++++++------------ src/Mod/Path/PathTests/boxtest.fcstd | Bin 0 -> 7490 bytes src/Mod/Path/PathTests/test_centroid_00.ngc | 69 ++++++++++++++++ src/Mod/Path/PathTests/test_linuxcnc_00.ngc | 9 +- 5 files changed, 109 insertions(+), 58 deletions(-) create mode 100644 src/Mod/Path/PathTests/boxtest.fcstd create mode 100644 src/Mod/Path/PathTests/test_centroid_00.ngc diff --git a/src/Mod/Path/CMakeLists.txt b/src/Mod/Path/CMakeLists.txt index bd68251899..c00eeb4d30 100644 --- a/src/Mod/Path/CMakeLists.txt +++ b/src/Mod/Path/CMakeLists.txt @@ -84,7 +84,9 @@ SET(PathScripts_SRCS SET(PathTests_SRCS PathTests/__init__.py + PathTests/boxtest.fcstd PathTests/PathTestUtils.py + PathTests/test_centroid_00.ngc PathTests/test_linuxcnc_00.ngc PathTests/TestPathCore.py PathTests/TestPathDepthParams.py diff --git a/src/Mod/Path/PathTests/TestPathPost.py b/src/Mod/Path/PathTests/TestPathPost.py index 6129a50ca4..bb6dd4c674 100644 --- a/src/Mod/Path/PathTests/TestPathPost.py +++ b/src/Mod/Path/PathTests/TestPathPost.py @@ -23,72 +23,39 @@ # *************************************************************************** import FreeCAD -import Path import PathScripts import PathScripts.PathContour import PathScripts.PathJob import PathScripts.PathPost import PathScripts.PathToolController -import PathScripts.PathUtils +import PathScripts.PathUtil import difflib import unittest + class PathPostTestCases(unittest.TestCase): def setUp(self): - self.doc = FreeCAD.newDocument("PathPostTest") - box = self.doc.addObject("Part::Box", "Box") - - # Create job and setup tool library + default tool - self.job = self.doc.addObject("Path::FeatureCompoundPython", "Job") - PathScripts.PathJob.ObjectPathJob(self.job, box, None) - PathScripts.PathToolController.CommandPathToolController.Create(self.job.Name, False) - tool1 = Path.Tool() - tool1.Diameter = 5.0 - tool1.Name = "Default Tool" - tool1.CuttingEdgeHeight = 15.0 - tool1.ToolType = "EndMill" - tool1.Material = "HighSpeedSteel" - - tc = FreeCAD.ActiveDocument.addObject("Path::FeaturePython",'TC') - PathScripts.PathToolController.ToolController(tc) - PathScripts.PathUtils.addToJob(tc, "Job") - tc.Tool = tool1 - tc.ToolNumber = 2 - - self.failUnless(True) - - self.doc.getObject("TC").ToolNumber = 2 - self.doc.recompute() - - contour = self.doc.addObject("Path::FeaturePython", "Contour") - PathScripts.PathContour.ObjectContour(contour) - contour.Active = True - contour.ClearanceHeight = 20.0 - contour.StepDown = 1.0 - contour.StartDepth= 10.0 - contour.FinalDepth=0.0 - contour.SafeHeight = 12.0 - contour.OffsetExtra = 0.0 - contour.Direction = 'CW' - contour.ToolController = tc - contour.UseComp = False - PathScripts.PathUtils.addToJob(contour) - PathScripts.PathContour.ObjectContour.setDepths(contour.Proxy, contour) - self.doc.recompute() + testfile = FreeCAD.getHomePath() + 'Mod/Path/PathTests/boxtest.fcstd' + self.doc = FreeCAD.open(testfile) + self.job = FreeCAD.ActiveDocument.getObject("Job") + self.postlist = [] + currTool = None + for obj in self.job.Group: + if not isinstance(obj.Proxy, PathScripts.PathToolController.ToolController): + tc = PathScripts.PathUtil.toolControllerForOp(obj) + if tc is not None: + if tc.ToolNumber != currTool: + self.postlist.append(tc) + self.postlist.append(obj) def tearDown(self): - FreeCAD.closeDocument("PathPostTest") + FreeCAD.closeDocument("boxtest") def testLinuxCNC(self): - # first create something to generate a path for - - self.job.PostProcessor = 'linuxcnc' - self.job.PostProcessorArgs = '--no-header --no-line-numbers --no-comments --no-show-editor --output-precision=2' - - post = PathScripts.PathPost.CommandPathPost() - (fail, gcode) = post.exportObjectsWith([self.job], self.job, False) - self.assertFalse(fail) + from PathScripts.post import linuxcnc_post as postprocessor + args = '--no-header --no-line-numbers --no-comments --no-show-editor --output-precision=2' + gcode = postprocessor.export(self.postlist, 'gcode.tmp', args) referenceFile = FreeCAD.getHomePath() + 'Mod/Path/PathTests/test_linuxcnc_00.ngc' with open(referenceFile, 'r') as fp: @@ -99,8 +66,24 @@ class PathPostTestCases(unittest.TestCase): with open('tab.tmp', 'w') as fp: fp.write(gcode) - if gcode != refGCode: msg = ''.join(difflib.ndiff(gcode.splitlines(True), refGCode.splitlines(True))) self.fail("linuxcnc output doesn't match: " + msg) + def testCentroid(self): + from PathScripts.post import centroid_post as postprocessor + args = '--no-header --no-line-numbers --no-comments --no-show-editor --axis-precision=2 --feed-precision=2' + gcode = postprocessor.export(self.postlist, 'gcode.tmp', args) + + referenceFile = FreeCAD.getHomePath() + 'Mod/Path/PathTests/test_centroid_00.ngc' + with open(referenceFile, 'r') as fp: + refGCode = fp.read() + + # Use if this test fails in order to have a real good look at the changes + if False: + with open('tab.tmp', 'w') as fp: + fp.write(gcode) + + if gcode != refGCode: + msg = ''.join(difflib.ndiff(gcode.splitlines(True), refGCode.splitlines(True))) + self.fail("linuxcnc output doesn't match: " + msg) diff --git a/src/Mod/Path/PathTests/boxtest.fcstd b/src/Mod/Path/PathTests/boxtest.fcstd new file mode 100644 index 0000000000000000000000000000000000000000..fc8f2bf7409fe687e94b979aed59a18f993bcbea GIT binary patch literal 7490 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 fv)=?w1Pfc literal 0 HcmV?d00001 diff --git a/src/Mod/Path/PathTests/test_centroid_00.ngc b/src/Mod/Path/PathTests/test_centroid_00.ngc new file mode 100644 index 0000000000..974c8a6250 --- /dev/null +++ b/src/Mod/Path/PathTests/test_centroid_00.ngc @@ -0,0 +1,69 @@ +G90 G80 G40 G49 +G53 G00 G17 +G20 +;Default_Tool +M6 T2 +M3 S0 +;Contour +;Uncompensated Tool Path +G0 Z15.00 +G90 +G17 +G0 Z15.00 +G0 X10.00 Y10.00 +G0 Z10.00 +G1 X10.00 Y10.00 Z9.00 +G1 X10.00 Y0.00 Z9.00 +G1 X0.00 Y0.00 Z9.00 +G1 X0.00 Y10.00 Z9.00 +G1 X10.00 Y10.00 Z9.00 +G1 X10.00 Y10.00 Z8.00 +G1 X10.00 Y0.00 Z8.00 +G1 X0.00 Y0.00 Z8.00 +G1 X0.00 Y10.00 Z8.00 +G1 X10.00 Y10.00 Z8.00 +G1 X10.00 Y10.00 Z7.00 +G1 X10.00 Y0.00 Z7.00 +G1 X0.00 Y0.00 Z7.00 +G1 X0.00 Y10.00 Z7.00 +G1 X10.00 Y10.00 Z7.00 +G1 X10.00 Y10.00 Z6.00 +G1 X10.00 Y0.00 Z6.00 +G1 X0.00 Y0.00 Z6.00 +G1 X0.00 Y10.00 Z6.00 +G1 X10.00 Y10.00 Z6.00 +G1 X10.00 Y10.00 Z5.00 +G1 X10.00 Y0.00 Z5.00 +G1 X0.00 Y0.00 Z5.00 +G1 X0.00 Y10.00 Z5.00 +G1 X10.00 Y10.00 Z5.00 +G1 X10.00 Y10.00 Z4.00 +G1 X10.00 Y0.00 Z4.00 +G1 X0.00 Y0.00 Z4.00 +G1 X0.00 Y10.00 Z4.00 +G1 X10.00 Y10.00 Z4.00 +G1 X10.00 Y10.00 Z3.00 +G1 X10.00 Y0.00 Z3.00 +G1 X0.00 Y0.00 Z3.00 +G1 X0.00 Y10.00 Z3.00 +G1 X10.00 Y10.00 Z3.00 +G1 X10.00 Y10.00 Z2.00 +G1 X10.00 Y0.00 Z2.00 +G1 X0.00 Y0.00 Z2.00 +G1 X0.00 Y10.00 Z2.00 +G1 X10.00 Y10.00 Z2.00 +G1 X10.00 Y10.00 Z1.00 +G1 X10.00 Y0.00 Z1.00 +G1 X0.00 Y0.00 Z1.00 +G1 X0.00 Y10.00 Z1.00 +G1 X10.00 Y10.00 Z1.00 +G1 X10.00 Y10.00 Z0.00 +G1 X10.00 Y0.00 Z0.00 +G1 X0.00 Y0.00 Z0.00 +G1 X0.00 Y10.00 Z0.00 +G1 X10.00 Y10.00 Z0.00 +G0 Z15.00 +M5 M25 +G49 H0 +G90 G80 G40 G49 +M99 diff --git a/src/Mod/Path/PathTests/test_linuxcnc_00.ngc b/src/Mod/Path/PathTests/test_linuxcnc_00.ngc index 3fb2a21c47..6256f88731 100644 --- a/src/Mod/Path/PathTests/test_linuxcnc_00.ngc +++ b/src/Mod/Path/PathTests/test_linuxcnc_00.ngc @@ -1,9 +1,6 @@ G17 G90 G21 (Default_Tool) -M6 T1 -M3 S0.00 -(TC) M6 T2 M3 S0.00 (Contour) @@ -11,9 +8,9 @@ M3 S0.00 G0 Z15.00 G90 G17 -G0 X0.00 Y0.00 Z15.00 -G0 X10.00 Y10.00 Z15.00 -G0 X10.00 Y10.00 Z10.00 +G0 Z15.00 +G0 X10.00 Y10.00 +G0 Z10.00 G1 X10.00 Y10.00 Z9.00 G1 X10.00 Y0.00 Z9.00 G1 X0.00 Y0.00 Z9.00