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