def testReparentedObjectTypeIdentityWithParentsCreatedInCpp(self): '''Reparent children from one parent to another, both created in C++.''' object_list = [] old_parent = ObjectType.create() new_parent = ObjectType.create() for i in range(3): obj = ObjectType() object_list.append(obj) obj.setParent(old_parent) for obj in object_list: obj.setParent(new_parent) for child in new_parent.children(): self.assert_(child in object_list)
def testOwnershipTransferenceCppCreated(self): '''Ownership transference using a C++ created object.''' o1 = ObjectType.create() o1.setObjectName('object1') o1_refcnt = sys.getrefcount(o1) bb = BlackBox() o1_ticket = bb.keepObjectType(o1) self.assertRaises(RuntimeError, o1.objectName)
def testInvalidateParent(self): '''Invalidate parent should invalidate children''' parent = ObjectType.create() child1 = ObjectType(parent) child1.setObjectName("child1") child2 = ObjectType.create() child2.setObjectName("child2") child2.setParent(parent) grandchild1 = ObjectType(child1) grandchild1.setObjectName("grandchild1") grandchild2 = ObjectType.create() grandchild2.setObjectName("grandchild2") grandchild2.setParent(child2) bbox = BlackBox() bbox.keepObjectType(parent) # Should invalidate the parent self.assertRaises(RuntimeError, parent.objectName) # some children still valid they are wrapper classes self.assertEqual(child1.objectName(), "child1") self.assertRaises(RuntimeError, child2.objectName) self.assertEqual(grandchild1.objectName(), "grandchild1") self.assertRaises(RuntimeError, grandchild2.objectName)
def testInvalidateChild(self): '''Invalidating method call should remove child from the care of a parent if it has one.''' parent = ObjectType() child1 = ObjectType(parent) child1.setObjectName('child1') child2 = ObjectType.create() child2.setParent(parent) child2.setObjectName('child2') self.assertEqual(parent.children(), [child1, child2]) bbox = BlackBox() # This method steals ownership from Python to C++. bbox.keepObjectType(child1) self.assertEqual(parent.children(), [child2]) bbox.keepObjectType(child2) self.assertEqual(parent.children(), []) del parent self.assertEqual(child1.objectName(), 'child1') self.assertRaises(RuntimeError, child2.objectName)