def testUseDefaultValues(self): o = ObjectType() o.setObjectNameWithSize(size=3) self.assertEqual(o.objectName(), "<un") # use name='unknown' default argument o.setObjectSplittedName("") self.assertEqual(o.objectName(), "<unknown>") # user prefix='<unk' and suffix='nown>'
def testObjectTypeReferenceAndPointer(self): '''In C++ we have "function(const ObjectType&, int)", in Python we add "function(ValueType)".''' obj = ObjectType() obj.setObjectName('sbrubbles') multiplier = 3.0 control = len(obj.objectName()) * multiplier self.assertEqual(SampleNamespace.passReferenceToObjectType(obj, multiplier), control) control = len(obj.objectName()) self.assertEqual(SampleNamespace.passReferenceToObjectType(obj), control)
def testMoreArguments(self): o = ObjectType() o.setObjectSplittedName("", prefix="pys", suffix="ide") self.assertEqual(o.objectName(), "pyside") o.setObjectSplittedName("", suffix="ide", prefix="pys") self.assertEqual(o.objectName(), "pyside") o.setObjectNameWithSize(name="pyside", size=6) self.assertEqual(o.objectName(), "pyside") o.setObjectNameWithSize(size=6, name="pyside") self.assertEqual(o.objectName(), "pyside")
def testDeleteChild(self): '''Delete child in C++ should invalidate child - using C++ wrapper''' parent = ObjectType() parent.setObjectName('parent') child = ObjectType(parent) child.setObjectName('child') parent.killChild('child') self.assertRaises(RuntimeError, child.objectName) self.assertEqual(parent.objectName(), 'parent')
def testOwnershipTransference(self): '''Ownership transference from Python to C++ and back again.''' o1 = ObjectType() o1.setObjectName('object1') o1_refcnt = sys.getrefcount(o1) o2 = ObjectType() o2.setObjectName('object2') o2_refcnt = sys.getrefcount(o2) bb = BlackBox() o1_ticket = bb.keepObjectType(o1) o2_ticket = bb.keepObjectType(o2) self.assertEqual(set(bb.objects()), set([o1, o2])) self.assertEqual(str(o1.objectName()), 'object1') self.assertEqual(str(o2.objectName()), 'object2') self.assertEqual(sys.getrefcount(o1), o1_refcnt + 1) # PySide give +1 ref to object with c++ ownership self.assertEqual(sys.getrefcount(o2), o2_refcnt + 1) o2 = bb.retrieveObjectType(o2_ticket) self.assertEqual(sys.getrefcount(o2), o2_refcnt) del bb self.assertRaises(RuntimeError, o1.objectName) self.assertEqual(str(o2.objectName()), 'object2') self.assertEqual(sys.getrefcount(o2), o2_refcnt)
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)
def testObjectTypeSetObjectNameWithStrInstantiation(self): '''ObjectType.setObjectName with Str instantiation as argument.''' s = 'object name' o = ObjectType() o.setObjectName(Str(s)) self.assertEqual(str(o.objectName()), s)
def testObjectTypeSetObjectNameWithStrVariable(self): '''ObjectType.setObjectName with Str variable as argument.''' s = Str('object name') o = ObjectType() o.setObjectName(s) self.assertEqual(str(o.objectName()), str(s))
def testObjectTypeSetObjectNameWithPythonString(self): '''ObjectType.setObjectName with Python string as argument.''' o = ObjectType() o.setObjectName('object name') self.assertEqual(str(o.objectName()), 'object name')