Download src/Mod/CAM/CAMTests/PostTestMocks.py from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 5.43 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/CAM/CAMTests/PostTestMocks.py
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/src/Mod/CAM/CAMTests/PostTestMocks.py
-
curl -L -o PostTestMocks.py https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/CAM/CAMTests/PostTestMocks.py
5.43 kB
| # *************************************************************************** | |
| # * Copyright (c) 2025 sliptonic <shopinthewoods@gmail.com> * | |
| # * * | |
| # * This program is free software; you can redistribute it and/or modify * | |
| # * it under the terms of the GNU Lesser General Public License (LGPL) * | |
| # * as published by the Free Software Foundation; either version 2 of * | |
| # * the License, or (at your option) any later version. * | |
| # * for detail see the LICENCE text file. * | |
| # * * | |
| # * This program is distributed in the hope that it will be useful, * | |
| # * but WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * | |
| # * GNU Library General Public License for more details. * | |
| # * * | |
| # * You should have received a copy of the GNU Library General Public * | |
| # * License along with this program; if not, write to the Free Software * | |
| # * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * | |
| # * USA * | |
| # * * | |
| # *************************************************************************** | |
| """Mock objects for postprocessor testing. | |
| This module provides mock objects that simulate FreeCAD CAM job structure | |
| without requiring disk I/O or loading actual FreeCAD documents. | |
| """ | |
| import Path | |
| class MockTool: | |
| def __init__(self): | |
| self.ShapeName = "endmill" | |
| class MockToolController: | |
| """Mock ToolController for operations.""" | |
| def __init__( | |
| self, | |
| tool_number=1, | |
| label="TC: Default Tool", | |
| spindle_speed=1000, | |
| spindle_dir="Forward", | |
| ): | |
| self.Tool = MockTool() | |
| self.ToolNumber = tool_number | |
| self.Label = label | |
| self.SpindleSpeed = spindle_speed | |
| self.SpindleDir = spindle_dir | |
| self.Name = f"TC{tool_number}" | |
| # Create a simple path with tool change commands | |
| self.Path = Path.Path() | |
| self.Path.addCommands( | |
| [Path.Command(f"M6 T{tool_number}"), Path.Command(f"M3 S{spindle_speed}")] | |
| ) | |
| def InList(self): | |
| return [] | |
| class MockOperation: | |
| """Mock Operation object for testing postprocessors.""" | |
| def __init__(self, name="Operation", label=None, tool_controller=None, active=True): | |
| self.Name = name | |
| self.Label = label or name | |
| self.Active = active | |
| self.ToolController = tool_controller | |
| # Create an empty path by default | |
| self.Path = Path.Path() | |
| def InList(self): | |
| """Mock InList - operations belong to a job.""" | |
| return [] | |
| class MockStock: | |
| """Mock Stock object with BoundBox.""" | |
| def __init__(self, xmin=0.0, xmax=100.0, ymin=0.0, ymax=100.0, zmin=0.0, zmax=10.0): | |
| self.Shape = type( | |
| "obj", | |
| (object,), | |
| { | |
| "BoundBox": type( | |
| "obj", | |
| (object,), | |
| { | |
| "XMin": xmin, | |
| "XMax": xmax, | |
| "YMin": ymin, | |
| "YMax": ymax, | |
| "ZMin": zmin, | |
| "ZMax": zmax, | |
| }, | |
| )() | |
| }, | |
| )() | |
| class MockSetupSheet: | |
| """Mock SetupSheet object.""" | |
| def __init__(self, clearance_height=5.0, safe_height=3.0): | |
| self.ClearanceHeightOffset = type("obj", (object,), {"Value": clearance_height})() | |
| self.SafeHeightOffset = type("obj", (object,), {"Value": safe_height})() | |
| class MockJob: | |
| """Mock Job object for testing postprocessors.""" | |
| def __init__(self): | |
| # Create mock Stock with BoundBox | |
| self.Stock = MockStock() | |
| # Create mock SetupSheet | |
| self.SetupSheet = MockSetupSheet() | |
| # Create mock Operations group | |
| self.Operations = type("obj", (object,), {"Group": []})() | |
| # Create mock Tools group | |
| self.Tools = type("obj", (object,), {"Group": []})() | |
| # Create mock Model group | |
| self.Model = type("obj", (object,), {"Group": []})() | |
| # Basic properties | |
| self.Label = "MockJob" | |
| self.PostProcessor = "" | |
| self.PostProcessorArgs = "" | |
| self.PostProcessorOutputFile = "" | |
| self.Fixtures = ["G54"] | |
| self.OrderOutputBy = "Tool" | |
| self.SplitOutput = False | |
| def InList(self): | |
| """Mock InList for fixture setup.""" | |
| return [] | |
| def create_default_job_with_operation(): | |
| """Create a mock job with a default tool controller and operation. | |
| This is a convenience function for common test scenarios. | |
| Returns: (job, operation, tool_controller) | |
| """ | |
| job = MockJob() | |
| # Create default tool controller | |
| tc = MockToolController(tool_number=1, label="TC: Default Tool", spindle_speed=1000) | |
| job.Tools.Group = [tc] | |
| # Create default operation | |
| op = MockOperation(name="Profile", label="Profile", tool_controller=tc) | |
| job.Operations.Group = [op] | |
| return job, op, tc | |