def testConvertPyFileToDescriptor(self, mapper, _): testDir = tempfile.mkdtemp() outFile = os.path.join(testDir, "test") pyFile = file(outFile, 'w') pyFile.write("I love streams ") pyFile.flush() fd = mapper.ConvertPyFileToDescriptor(pyFile) FILE = Unmanaged._fdopen(fd, "w") testStr = "and file descriptors!" testStrPtr = mapper.Store(testStr) testDataPtr = OffsetPtr(testStrPtr, Marshal.OffsetOf(PyStringObject, "ob_sval")) self.assertTrue( Unmanaged.fwrite(testDataPtr, 1, len(testStr), FILE) > 0, "writing failed") Unmanaged.fflush(FILE) pyFile.close() stream = file(outFile, 'r') output = stream.read() stream.close() self.assertEquals(output, "I love streams and file descriptors!")
def testIC_PyFile_AsFile_Write(self, mapper, addToCleanUp, _): testDir = tempfile.mkdtemp() addToCleanUp(lambda: shutil.rmtree(testDir)) path = os.path.join(testDir, "test") testStr = "meh, string data" testLength = len(testStr) testStrPtr = mapper.Store(testStr) testDataPtr = OffsetPtr(testStrPtr, Marshal.OffsetOf(PyStringObject, "ob_sval")) filePtr = mapper.Store(open(path, "w")) f = mapper.IC_PyFile_AsFile(filePtr) self.assertEquals(Unmanaged.fwrite(testDataPtr, 1, testLength, f), testLength, "didn't work") # nasty test: patch out PyObject_Free # the memory will not be deallocated, but the FILE handle should be calls = [] def Free(ptr): calls.append(ptr) freeDgt = dgt_void_ptr(Free) CPyMarshal.WriteFunctionPtrField(mapper.PyFile_Type, PyTypeObject, "tp_free", freeDgt) mapper.DecRef(filePtr) self.assertEquals(calls, [filePtr], "failed to call tp_free function") mgdF = open(path) result = mgdF.read() self.assertEquals( result, testStr, "failed to write (got >>%s<<) -- deallocing filePtr did not close FILE" % result ) mgdF.close()
def testIC_PyFile_AsFile_Write(self, mapper, addToCleanUp, _): testDir = tempfile.mkdtemp() addToCleanUp(lambda: shutil.rmtree(testDir)) path = os.path.join(testDir, "test") testStr = "meh, string data" testLength = len(testStr) testStrPtr = mapper.Store(testStr) testDataPtr = OffsetPtr(testStrPtr, Marshal.OffsetOf(PyStringObject, "ob_sval")) filePtr = mapper.Store(open(path, 'w')) f = mapper.IC_PyFile_AsFile(filePtr) self.assertEquals(Unmanaged.fwrite(testDataPtr, 1, testLength, f), testLength, "didn't work") # nasty test: patch out PyObject_Free # the memory will not be deallocated, but the FILE handle should be calls = [] def Free(ptr): calls.append(ptr) freeDgt = dgt_void_ptr(Free) CPyMarshal.WriteFunctionPtrField(mapper.PyFile_Type, PyTypeObject, 'tp_free', freeDgt) mapper.DecRef(filePtr) self.assertEquals(calls, [filePtr], 'failed to call tp_free function') mgdF = open(path) result = mgdF.read() self.assertEquals(result, testStr, "failed to write (got >>%s<<) -- deallocing filePtr did not close FILE" % result) mgdF.close()
def testConvertPyFileToDescriptor(self, mapper, _): testDir = tempfile.mkdtemp() outFile = os.path.join(testDir, "test") pyFile = file(outFile, "w") pyFile.write("I love streams ") pyFile.flush() fd = mapper.ConvertPyFileToDescriptor(pyFile) FILE = Unmanaged._fdopen(fd, "w") testStr = "and file descriptors!" testStrPtr = mapper.Store(testStr) testDataPtr = OffsetPtr(testStrPtr, Marshal.OffsetOf(PyStringObject, "ob_sval")) self.assertTrue(Unmanaged.fwrite(testDataPtr, 1, len(testStr), FILE) > 0, "writing failed") Unmanaged.fflush(FILE) pyFile.close() stream = file(outFile, "r") output = stream.read() stream.close() self.assertEquals(output, "I love streams and file descriptors!")