From f687e25e017fe0ff5ca9e4fadd22f45793855118 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 9 Dec 2021 18:47:38 +0100 Subject: [PATCH] Test: add unit test for issue 0004649 --- src/Mod/Test/Document.py | 46 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index 663b1a662e..0a67951486 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -1379,8 +1379,6 @@ class DocumentPropertyCases(unittest.TestCase): class DocumentExpressionCases(unittest.TestCase): def setUp(self): self.Doc = FreeCAD.newDocument() - self.Obj1 = self.Doc.addObject("App::FeatureTest","Test") - self.Obj2 = self.Doc.addObject("App::FeatureTest","Test") def assertAlmostEqual (self, v1, v2) : if (math.fabs(v2-v1) > 1E-12) : @@ -1388,6 +1386,8 @@ class DocumentExpressionCases(unittest.TestCase): def testExpression(self): + self.Obj1 = self.Doc.addObject("App::FeatureTest","Test") + self.Obj2 = self.Doc.addObject("App::FeatureTest","Test") # set the object twice to test that the backlinks are removed when overwriting the expression self.Obj2.setExpression('Placement.Rotation.Angle', u'%s.Placement.Rotation.Angle' % self.Obj1.Name) self.Obj2.setExpression('Placement.Rotation.Angle', u'%s.Placement.Rotation.Angle' % self.Obj1.Name) @@ -1406,6 +1406,48 @@ class DocumentExpressionCases(unittest.TestCase): # must not raise a topological error self.assertEqual(self.Doc.recompute(), 2) + def testIssue4649(self): + class Cls(): + def __init__(self, obj): + self.MonitorChanges = False + obj.Proxy = self + obj.addProperty('App::PropertyFloat', "propA", "group") + obj.addProperty('App::PropertyFloat', "propB", "group") + self.MonitorChanges = True + obj.setExpression("propB", '6*9') + def onChanged(self, obj, prop): + print("onChanged",self, obj, prop) + if (self.MonitorChanges and prop == "propA"): + print('Removing expression...') + obj.setExpression("propB", None) + + obj = self.Doc.addObject("App::DocumentObjectGroupPython", "Obj") + Cls(obj) + self.Doc.openTransaction("Expression") + obj.setExpression("propA", '42') + self.Doc.recompute() + self.Doc.commitTransaction() + self.assertTrue(('propB', None) in obj.ExpressionEngine) + self.assertTrue(('propA', "42") in obj.ExpressionEngine) + + self.Doc.undo() + self.assertFalse(('propB', None) in obj.ExpressionEngine) + self.assertFalse(('propA', "42") in obj.ExpressionEngine) + + self.Doc.redo() + self.assertTrue(('propB', None) in obj.ExpressionEngine) + self.assertTrue(('propA', "42") in obj.ExpressionEngine) + + self.Doc.recompute() + obj.ExpressionEngine + + TempPath = tempfile.gettempdir() + SaveName = TempPath + os.sep + "ExpressionTests.FCStd" + self.Doc.saveAs(SaveName) + FreeCAD.closeDocument(self.Doc.Name) + self.Doc = FreeCAD.openDocument(SaveName) + + def tearDown(self): #closing doc FreeCAD.closeDocument(self.Doc.Name)