# Adapted from test_file.py by Daniel Stutzbach import sys import os import unittest from array import array from weakref import proxy from test.test_support import TESTFN, findfile, run_unittest from UserList import UserList import _fileio class AutoFileTests(unittest.TestCase): # file tests for which a test file is automatically set up def setUp(self): self.f = _fileio._FileIO(TESTFN, 'w') def tearDown(self): if self.f: self.f.close() os.remove(TESTFN) def testWeakRefs(self): # verify weak references p = proxy(self.f) p.write(bytes(range(10))) self.assertEquals(self.f.tell(), p.tell()) self.f.close() self.f = None self.assertRaises(ReferenceError, getattr, p, 'tell') def testSeekTell(self): self.f.write(bytes(range(20))) self.assertEquals(self.f.tell(), 20) self.f.seek(0) self.assertEquals(self.f.tell(), 0) self.f.seek(10) self.assertEquals(self.f.tell(), 10) self.f.seek(5, 1) self.assertEquals(self.f.tell(), 15) self.f.seek(-5, 1) self.assertEquals(self.f.tell(), 10) self.f.seek(-5, 2) self.assertEquals(self.f.tell(), 15) def testAttributes(self): # verify expected attributes exist f = self.f # XXX do we want these? #f.name # merely shouldn't blow up #f.mode # ditto #f.closed # ditto # verify the others aren't for attr in 'name', 'mode', 'closed': self.assertRaises((AttributeError, TypeError), setattr, f, attr, 'oops') def testReadinto(self): # verify readinto self.f.write(bytes([1, 2])) self.f.close() a = array('b', 'x'*10) self.f = _fileio._FileIO(TESTFN, 'r') n = self.f.readinto(a) self.assertEquals(array('b', [1, 2]), a[:n]) def testRepr(self): # verify repr works return # XXX doesn't work yet self.assert_(repr(self.f).startswith(" # "file.truncate fault on windows" f = _fileio._FileIO(TESTFN, 'w') f.write(bytes(range(11))) f.close() f = _fileio._FileIO(TESTFN,'r+') data = f.read(5) if data != bytes(range(5)): self.fail("Read on file opened for update failed %r" % data) if f.tell() != 5: self.fail("File pos after read wrong %d" % f.tell()) f.truncate() if f.tell() != 5: self.fail("File pos after ftruncate wrong %d" % f.tell()) f.close() size = os.path.getsize(TESTFN) if size != 5: self.fail("File size after ftruncate wrong %d" % size) try: bug801631() finally: os.unlink(TESTFN) def test_main(): # Historically, these tests have been sloppy about removing TESTFN. # So get rid of it no matter what. try: run_unittest(AutoFileTests, OtherFileTests) finally: if os.path.exists(TESTFN): os.unlink(TESTFN) if __name__ == '__main__': test_main()