From bd813f1df0d6edf3689dc1f188b922485974cec3 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 2 Nov 2024 23:45:02 +0100 Subject: [PATCH] Tests: Add unit test to demonstrate failure of #17553 --- src/Mod/PartDesign/CMakeLists.txt | 1 + .../PartDesign/PartDesignTests/TestSketch.py | 101 ++++++++++++++++++ src/Mod/PartDesign/TestPartDesignApp.py | 1 + 3 files changed, 103 insertions(+) create mode 100644 src/Mod/PartDesign/PartDesignTests/TestSketch.py diff --git a/src/Mod/PartDesign/CMakeLists.txt b/src/Mod/PartDesign/CMakeLists.txt index c48cc9679b..28cd8003f9 100644 --- a/src/Mod/PartDesign/CMakeLists.txt +++ b/src/Mod/PartDesign/CMakeLists.txt @@ -55,6 +55,7 @@ set(PartDesign_TestScripts PartDesignTests/TestThickness.py PartDesignTests/TestTopologicalNamingProblem.py PartDesignTests/TestInvoluteGear.py + PartDesignTests/TestSketch.py ) if(BUILD_GUI) diff --git a/src/Mod/PartDesign/PartDesignTests/TestSketch.py b/src/Mod/PartDesign/PartDesignTests/TestSketch.py new file mode 100644 index 0000000000..844bf04974 --- /dev/null +++ b/src/Mod/PartDesign/PartDesignTests/TestSketch.py @@ -0,0 +1,101 @@ +#*************************************************************************** +#* Copyright (c) 2024 Werner Mayer * +#* * +#* This file is part of FreeCAD. * +#* * +#* FreeCAD is free software: you can redistribute it and/or modify it * +#* under the terms of the GNU Lesser General Public License as * +#* published by the Free Software Foundation, either version 2.1 of the * +#* License, or (at your option) any later version. * +#* * +#* FreeCAD 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 * +#* Lesser General Public License for more details. * +#* * +#* You should have received a copy of the GNU Lesser General Public * +#* License along with FreeCAD. If not, see * +#* . * +#* * +#*************************************************************************** + +import unittest + +import FreeCAD + +""" Test transaction interaction """ +class TestSketch(unittest.TestCase): + def setUp(self): + self.doc = FreeCAD.newDocument("PartDesignTestSketch") + self.doc.UndoMode = True + + def testIssue17553(self): + self.doc.openTransaction("Create box") + box = self.doc.addObject("Part::Box", "Box") + self.doc.commitTransaction() + self.doc.recompute() + + self.doc.openTransaction("Create sketch") + body = self.doc.addObject('PartDesign::Body', 'Body') + plane = self.doc.getObject('XY_Plane') + self.doc.commitTransaction() + + self.doc.openTransaction("Rename object") + box.Label = "Object" + self.doc.commitTransaction() + + sketch = body.newObject('Sketcher::SketchObject', 'Sketch') + sketch.AttachmentSupport = (plane, ['']) + sketch.MapMode = 'FlatFace' + self.doc.recompute() + + self.assertEqual(sketch.InList, [body]) + self.assertEqual(sketch.OutList, [plane]) + sketch.AttachmentSupport == [(plane, ("",))] + + self.doc.undo() # undo renaming + self.doc.undo() # undo body creation + self.doc.undo() # undo box creation + + self.doc.openTransaction("Remove sketch") + self.doc.removeObject(sketch.Name) + self.doc.commitTransaction() + + self.doc.undo() # undo removal + + self.assertEqual(sketch.InList, []) + self.assertEqual(sketch.OutList, []) + self.assertEqual(sketch.AttachmentSupport, []) + + def testDependency(self): + self.doc.openTransaction("Create box") + box = self.doc.addObject("Part::Box", "Box") + self.doc.commitTransaction() + self.doc.recompute() + + self.doc.openTransaction("Create sketch") + body = self.doc.addObject('PartDesign::Body', 'Body') + plane = self.doc.getObject('XY_Plane') + self.doc.commitTransaction() + + self.doc.openTransaction("Rename object") + box.Label = "Object" + self.doc.commitTransaction() + + sketch = body.newObject('Sketcher::SketchObject', 'Sketch') + sketch.AttachmentSupport = (plane, ['']) + sketch.MapMode = 'FlatFace' + self.doc.recompute() + + sketch.OutList + sketch.AttachmentSupport + + self.doc.undo() # undo renaming + self.doc.undo() # undo body creation + self.doc.undo() # undo box creation + + self.doc.DependencyGraph + + def tearDown(self): + FreeCAD.closeDocument("PartDesignTestSketch") + diff --git a/src/Mod/PartDesign/TestPartDesignApp.py b/src/Mod/PartDesign/TestPartDesignApp.py index 36485bfff1..be25234622 100644 --- a/src/Mod/PartDesign/TestPartDesignApp.py +++ b/src/Mod/PartDesign/TestPartDesignApp.py @@ -55,6 +55,7 @@ from PartDesignTests.TestThickness import TestThickness # extras from PartDesignTests.TestInvoluteGear import TestInvoluteGear +from PartDesignTests.TestSketch import TestSketch # Topological naming problem from PartDesignTests.TestTopologicalNamingProblem import TestTopologicalNamingProblem