def testRefCountIncRefDecRef(self): frees = [] allocator = GetAllocatingTestAllocator([], frees) mapper = PythonMapper(allocator) deallocTypes = CreateTypes(mapper) obj1 = object() ptr = mapper.Store(obj1) self.assertEquals(mapper.HasPtr(ptr), True) mapper.IncRef(ptr) self.assertEquals(mapper.RefCount(ptr), 2, "unexpected refcount") self.assertEquals(mapper.HasPtr(ptr), True) del frees[:] mapper.DecRef(ptr) self.assertEquals(mapper.RefCount(ptr), 1, "unexpected refcount") self.assertEquals(mapper.HasPtr(ptr), True) self.assertEquals(frees, [], "unexpected deallocations") mapper.DecRef(ptr) self.assertEquals(mapper.HasPtr(ptr), False) self.assertEquals(frees, [ptr], "unexpected deallocations") self.assertRaises(KeyError, lambda: mapper.PyObject_Free(ptr)) mapper.Dispose() deallocTypes()
def testNullPointers(self): allocator = GetDoNothingTestAllocator([]) mapper = PythonMapper(allocator) self.assertEquals(mapper.HasPtr(IntPtr.Zero), False) self.assertRaisesClr(CannotInterpretException, lambda: mapper.IncRef(IntPtr.Zero)) self.assertRaisesClr(CannotInterpretException, lambda: mapper.DecRef(IntPtr.Zero)) self.assertRaisesClr(CannotInterpretException, lambda: mapper.Retrieve(IntPtr.Zero)) self.assertRaisesClr(CannotInterpretException, lambda: mapper.RefCount(IntPtr.Zero)) mapper.Dispose()
def test_PyObject_New(self): allocs = [] allocator = GetAllocatingTestAllocator(allocs, []) mapper = PythonMapper(allocator) deallocTypes = CreateTypes(mapper) typeObjSize = Marshal.SizeOf(PyTypeObject()) typePtr = Marshal.AllocHGlobal(typeObjSize) CPyMarshal.Zero(typePtr, typeObjSize) CPyMarshal.WriteIntField(typePtr, PyTypeObject, "tp_basicsize", 31337) del allocs[:] objPtr = mapper._PyObject_New(typePtr) self.assertEquals(allocs, [(objPtr, 31337)]) self.assertEquals(CPyMarshal.ReadPtrField(objPtr, PyObject, 'ob_type'), typePtr) self.assertEquals(CPyMarshal.ReadIntField(objPtr, PyObject, 'ob_refcnt'), 1) self.assertEquals(mapper.HasPtr(objPtr), False) mapper.Dispose() deallocTypes()