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()
Esempio n. 2
0
 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()
Esempio n. 3
0
 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()