From ccb108dc3d5c4128367d46d324a6f6a3f5b86ef7 Mon Sep 17 00:00:00 2001 From: ickby Date: Mon, 1 Oct 2018 07:06:37 +0200 Subject: [PATCH] Improve document observer tests by checking parameters of each call, not only the last one --- src/Mod/Test/Document.py | 152 +++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 63 deletions(-) diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index 9be012ee1e..9fd5e6f88c 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -1316,81 +1316,81 @@ class DocumentObserverCases(unittest.TestCase): class Observer(): signal = [] - parameter = None - parameter2 = None + parameter = [] + parameter2 = [] def slotCreatedDocument(self, doc): self.signal.append('DocCreated'); - self.parameter = doc; + self.parameter.append(doc); def slotDeletedDocument(self, doc): self.signal.append('DocDeleted'); - self.parameter = doc; + self.parameter.append(doc); def slotRelabelDocument(self, doc): self.signal.append('DocRelabled'); - self.parameter = doc; + self.parameter.append(doc); def slotActivateDocument(self, doc): self.signal.append('DocActivated'); - self.parameter = doc; + self.parameter.append(doc); def slotRecomputedDocument(self, doc): self.signal.append('DocRecomputed'); - self.parameter = doc; + self.parameter.append(doc); def slotUndoDocument(self, doc): self.signal.append('DocUndo'); - self.parameter = doc; + self.parameter.append(doc); def slotRedoDocument(self, doc): self.signal.append('DocRedo'); - self.parameter = doc; + self.parameter.append(doc); def slotOpenTransaction(self, doc, name): self.signal.append('DocOpenTransaction'); - self.parameter = doc; - self.parameter2 = name; + self.parameter.append(doc); + self.parameter2.append(name); def slotCommitTransaction(self, doc): self.signal.append('DocCommitTransaction'); - self.parameter = doc; + self.parameter.append(doc); def slotAbortTransaction(self, doc): self.signal.append('DocAbortTransaction'); - self.parameter = doc; + self.parameter.append(doc); def slotBeforeChangeDocument(self, doc, prop): self.signal.append('DocBeforeChange') - self.parameter = doc - self.parameter2 = prop + self.parameter.append(doc) + self.parameter2.append(prop) def slotChangedDocument(self, doc, prop): self.signal.append('DocChanged') - self.parameter = doc - self.parameter2 = prop + self.parameter.append(doc) + self.parameter2.append(prop) def slotCreatedObject(self, obj): self.signal.append('ObjCreated'); - self.parameter = obj; + self.parameter.append(obj); def slotDeletedObject(self, obj): self.signal.append('ObjDeleted'); - self.parameter = obj; + self.parameter.append(obj) def slotChangedObject(self, obj, prop): self.signal.append('ObjChanged'); - self.parameter = obj; - self.parameter2 = prop; + self.parameter.append(obj) + self.parameter2.append(prop) def slotBeforeChangeObject(self, obj, prop): self.signal.append('ObjBeforeChange'); - self.parameter = obj; - self.parameter2 = prop; + self.parameter.append(obj) + self.parameter2.append(prop) def slotRecomputedObject(self, obj): self.signal.append('ObjRecomputed'); - self.parameter = obj; + self.parameter.append(obj) def setUp(self): @@ -1400,112 +1400,134 @@ class DocumentObserverCases(unittest.TestCase): def testDocument(self): # testing document level signals - self.Doc1 = FreeCAD.newDocument("Observer1"); + self.Doc1 = FreeCAD.newDocument("Observer1"); self.failUnless(self.Obs.signal.pop(0) == 'DocActivated') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) self.failUnless(self.Obs.signal.pop(0) == 'DocCreated') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) self.failUnless(self.Obs.signal.pop(0) == 'DocBeforeChange') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(self.Obs.parameter2.pop(0) == 'Label') self.failUnless(self.Obs.signal.pop(0) == 'DocChanged') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(self.Obs.parameter2.pop(0) == 'Label') self.failUnless(self.Obs.signal.pop(0) == 'DocRelabled') - self.failUnless(self.Obs.parameter is self.Doc1) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2 = FreeCAD.newDocument("Observer2"); self.failUnless(self.Obs.signal.pop(0) == 'DocActivated') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc2) self.failUnless(self.Obs.signal.pop(0) == 'DocCreated') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc2) self.failUnless(self.Obs.signal.pop(0) == 'DocBeforeChange') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc2) + self.failUnless(self.Obs.parameter2.pop(0) == 'Label') self.failUnless(self.Obs.signal.pop(0) == 'DocChanged') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc2) + self.failUnless(self.Obs.parameter2.pop(0) == 'Label') self.failUnless(self.Obs.signal.pop(0) == 'DocRelabled') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop(0) is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) FreeCAD.setActiveDocument('Observer1') self.failUnless(self.Obs.signal.pop() == 'DocActivated') - self.failUnless(self.Obs.parameter is self.Doc1) - self.failUnless(not self.Obs.signal) - + self.failUnless(self.Obs.parameter.pop() is self.Doc1) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) + self.Doc2.openTransaction('test') self.failUnless(self.Obs.signal.pop() == 'DocOpenTransaction') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(self.Obs.parameter2 == 'test') - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(self.Obs.parameter2.pop() == 'test') + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2.commitTransaction() self.failUnless(self.Obs.signal.pop() == 'DocCommitTransaction') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2.openTransaction('test2') self.failUnless(self.Obs.signal.pop() == 'DocOpenTransaction') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(self.Obs.parameter2.pop() == 'test2') + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2.abortTransaction() self.failUnless(self.Obs.signal.pop() == 'DocAbortTransaction') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2.undo() self.failUnless(self.Obs.signal.pop() == 'DocUndo') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc2.redo() self.failUnless(self.Obs.signal.pop() == 'DocRedo') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) self.Doc1.Comment = 'test comment' self.failUnless(self.Obs.signal.pop(0) == 'DocBeforeChange') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(self.Obs.parameter2.pop(0) == 'Comment') self.failUnless(self.Obs.signal.pop(0) == 'DocChanged') - self.failUnless(self.Obs.parameter is self.Doc1) - self.failUnless(self.Obs.parameter2 == 'Comment') + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(self.Obs.parameter2.pop(0) == 'Comment') FreeCAD.closeDocument('Observer2') self.failUnless(self.Obs.signal.pop() == 'DocDeleted') - self.failUnless(self.Obs.parameter is self.Doc2) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc2) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) FreeCAD.closeDocument('Observer1') self.failUnless(self.Obs.signal.pop() == 'DocDeleted') - self.failUnless(self.Obs.parameter is self.Doc1) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop() is self.Doc1) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) def testObject(self): #testing signal on object changes self.Doc1 = FreeCAD.newDocument("Observer1") self.Obs.signal = [] + self.Obs.parameter = [] + self.Obs.parameter2 = [] obj = self.Doc1.addObject("App::DocumentObject","obj") self.failUnless(self.Obs.signal.pop() == 'ObjCreated') - self.failUnless(self.Obs.parameter is obj) + self.failUnless(self.Obs.parameter.pop() is obj) #there are multiple object change signals self.Obs.signal = [] + self.Obs.parameter = [] + self.Obs.parameter2 = [] obj.Label = "myobj" self.failUnless(self.Obs.signal.pop(0) == 'ObjBeforeChange') + self.failUnless(self.Obs.parameter.pop(0) is obj) + self.failUnless(self.Obs.parameter2.pop(0) == "Label") self.failUnless(self.Obs.signal.pop(0) == 'ObjChanged') - self.failUnless(self.Obs.parameter is obj) - self.failUnless(self.Obs.parameter2 == "Label") - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop(0) is obj) + self.failUnless(self.Obs.parameter2.pop(0) == "Label") + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) obj.touch() obj.recompute() self.failUnless(self.Obs.signal.pop(0) == 'ObjRecomputed') - self.failUnless(self.Obs.parameter is obj) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop(0) is obj) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) obj.touch() self.Doc1.recompute() self.failUnless(self.Obs.signal.pop(0) == 'ObjRecomputed') + self.failUnless(self.Obs.parameter.pop(0) is obj) self.failUnless(self.Obs.signal.pop(0) == 'DocRecomputed') - self.failUnless(self.Obs.parameter is self.Doc1) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.parameter.pop(0) is self.Doc1) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) FreeCAD.ActiveDocument.removeObject(obj.Name) - self.failUnless(self.Obs.signal.pop(0) == 'ObjDeleted') - self.failUnless(self.Obs.parameter is obj) - self.failUnless(not self.Obs.signal) + self.failUnless(self.Obs.signal.pop() == 'ObjDeleted') + self.failUnless(self.Obs.parameter.pop() is obj) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) FreeCAD.closeDocument('Observer1') self.Obs.signal = [] @@ -1516,15 +1538,19 @@ class DocumentObserverCases(unittest.TestCase): self.Doc1 = FreeCAD.newDocument("Observer1"); self.Doc1.UndoMode = 0 self.Obs.signal = [] + self.Obs.parameter = [] + self.Obs.parameter2 = [] self.Doc1.openTransaction('test') self.Doc1.commitTransaction() self.Doc1.undo() self.Doc1.redo() - self.failUnless(not self.Obs.signal) + self.failUnless(not self.Obs.signal and not self.Obs.parameter and not self.Obs.parameter2) FreeCAD.closeDocument('Observer1') self.Obs.signal = [] + self.Obs.parameter = [] + self.Obs.parameter2 = [] def tearDown(self): #closing doc