예제 #1
0
 def testTypeMappings(self, mapper, _):
     for (k, v) in BUILTIN_TYPES.items():
         typePtr = getattr(mapper, k)
         self.assertEquals(CPyMarshal.ReadCStringField(typePtr, PyTypeObject, 'tp_name'), v.__name__)
         
         if typePtr == mapper.PyFile_Type:
             self.assertNotEquals(mapper.Retrieve(typePtr), v, "failed to map PyFile_Type to something-that-isn't file")
         else:
             self.assertEquals(mapper.Retrieve(typePtr), v, "failed to map " + k)
         
         if typePtr in (mapper.PyType_Type, mapper.PyBaseObject_Type):
             # surprising refcount because of the unmanaged PyFile malarkey
             self.assertEquals(mapper.RefCount(typePtr), 2, "failed to add reference to " + k)
         else:
             self.assertEquals(mapper.RefCount(typePtr), 1, "failed to add reference to " + k)
         
         mapper.PyType_Ready(typePtr)
         self.assertNotEquals(CPyMarshal.ReadIntField(typePtr, PyTypeObject, "tp_basicsize"), 0)
         basePtr = CPyMarshal.ReadPtrField(typePtr, PyTypeObject, "tp_base")
         if k == "PyBaseObject_Type":
             self.assertEquals(basePtr, IntPtr.Zero)
         elif k == "PyBool_Type":
             self.assertEquals(basePtr, mapper.PyInt_Type)
         else:
             self.assertEquals(basePtr, mapper.PyBaseObject_Type)
예제 #2
0
    def testReadCStringFieldEmpty(self):
        data = Marshal.AllocHGlobal(Marshal.SizeOf(PyTypeObject()))
        CPyMarshal.Zero(data, Marshal.SizeOf(PyTypeObject()))
        CPyMarshal.WritePtrField(data, PyTypeObject, "tp_doc", IntPtr.Zero)

        self.assertEquals(
            CPyMarshal.ReadCStringField(data, PyTypeObject, "tp_doc"), "",
            "failed to read correctly")

        Marshal.FreeHGlobal(data)
예제 #3
0
    def testWriteCStringField(self):
        data = Marshal.AllocHGlobal(Marshal.SizeOf(PyTypeObject()))
        CPyMarshal.Zero(data, Marshal.SizeOf(PyTypeObject()))
        string = "Hey, I am a string. I have tricksy \\escapes\\."
        CPyMarshal.WriteCStringField(data, PyTypeObject, "tp_doc", string)

        self.assertEquals(
            CPyMarshal.ReadCStringField(data, PyTypeObject, "tp_doc"), string,
            "failed to read correctly")
        Marshal.FreeHGlobal(
            CPyMarshal.ReadPtrField(data, PyTypeObject, "tp_doc"))
        Marshal.FreeHGlobal(data)