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