1""" 2Tests for dealing with 'FILE*' argument. Only suppored on Python 2 for now because 3the python 3 type 'file' is not implemented using C stdio. 4""" 5from PyObjCTest.filepointer import OC_TestFilePointer 6from PyObjCTools.TestSupport import * 7 8fp = open('/etc/passwd', 'r') 9gFirstPasswdLine = fp.readline() 10fp.close() 11 12class TestFilePointer (TestCase): 13 def testOpenInPython(self): 14 fp = open('/etc/passwd', 'r') 15 o = OC_TestFilePointer.new() 16 line = o.readline_(fp) 17 fp.close() 18 19 self.assertEqual(line, gFirstPasswdLine) 20 21 def testOpenReadingInObjC(self): 22 o = OC_TestFilePointer.new() 23 fp = o.openFile_withMode_('/etc/passwd', 'r') 24 self.assertIsInstance(fp, file) 25 self.assertEqual(fp.mode, 'r') 26 27 line = fp.readline() 28 fp.close() 29 30 self.assertEqual(line, gFirstPasswdLine) 31 32 def testOpenWritingInObjC(self): 33 o = OC_TestFilePointer.new() 34 fp = o.openFile_withMode_('/tmp/pyobjc.filepointer.txt', 'w') 35 self.assertIsInstance(fp, file) 36 self.assertEqual(fp.mode, 'w') 37 38 fp.write('foobar\n') 39 fp.flush() # XXX: this isn't quite correct? 40 fp.close() 41 42 fp = open('/tmp/pyobjc.filepointer.txt') 43 data = fp.read() 44 self.assertEqual(data, 'foobar\n') 45 fp.close() 46 47 def testOpenReadWriteInObjC(self): 48 o = OC_TestFilePointer.new() 49 fp = o.openFile_withMode_('/tmp/pyobjc.filepointer.txt', 'w+') 50 self.assertIsInstance(fp, file) 51 self.assertEqual(fp.mode, 'w+') 52 53 def dont_testOpenAppendInObjC(self): 54 # We can't reliably detect append mode, don't bother testing for it. 55 o = OC_TestFilePointer.new() 56 fp = o.openFile_withMode_('/tmp/pyobjc.filepointer.txt', 'a') 57 self.assertIsInstance(fp, file) 58 self.assertEqual(fp.mode, 'a') 59 60 o = OC_TestFilePointer.new() 61 fp = o.openFile_withMode_('/tmp/pyobjc.filepointer.txt', 'a+') 62 self.assertIsInstance(fp, file) 63 self.assertEqual(fp.mode, 'a+') 64 65if __name__ == "__main__": 66 main() 67