def test5(self): """test FileWrapper with unseekable file object""" sio = StringIO('Simple test file') sio.seek = None f = FileWrapper(fobj=sio, use_mmap=False) self.assertFalse(f.is_seekable()) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(3), 'Sim') self.assertEqual(f.tell(), 3) # seeking backward is not supposed to work self.assertRaises(IOError, f.seek, 0, os.SEEK_SET) self.assertRaises(IOError, f.seek, -2, os.SEEK_SET) self.assertRaises(IOError, f.seek, -2, os.SEEK_CUR) self.assertRaises(IOError, f.seek, 5, os.SEEK_END) # seeking forward (absolute) does work (skip 'pl') f.seek(5, os.SEEK_SET) self.assertEqual(f.read(3), 'e t') # seeking forward (relative) does work (skip 'est') f.seek(3, os.SEEK_CUR) # read the rest of the file self.assertEqual(f.read(), ' file') f.close() # sio should not be closed self.assertFalse(sio.closed)
def test1(self): """test FileWrapper with filename (no mmap)""" fname = self.fixture_file('filewrapper1.txt') f = FileWrapper(filename=fname, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertTrue(f.is_seekable()) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(1), 'T') self.assertEqual(f.tell(), 1) # seek to position 0 again f.seek(0) self.assertEqual(f.read(5), 'This ') self.assertEqual(f.tell(), 5) # read rest of the file self.assertEqual(f.read(), 'is a simple\ntext file.\n') f.close()
def test2(self): """test FileWrapper with file object (no mmap)""" fname = self.fixture_file('filewrapper1.txt') with open(fname, 'r') as fobj: f = FileWrapper(fobj=fobj, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertTrue(f.is_seekable()) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(1), 'T') self.assertEqual(f.tell(), 1) # seek to position 0 again f.seek(-1, os.SEEK_CUR) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(5), 'This ') self.assertEqual(f.tell(), 5) # read rest of the file self.assertEqual(f.read(), 'is a simple\ntext file.\n') f.close() # the fobj should not be closed in this case self.assertFalse(fobj.closed)
def test14(self): """test NewAsciiReader read files (unseekable fobj)""" # the read sequence is identical to test12 # but the expected results are different because the fobj # is not seekable fname = self.fixture_file('new_ascii_reader3.cpio') sio = StringIO(open(fname, 'r').read()) sio.seek = None f = FileWrapper(fobj=sio) self.assertFalse(f.is_seekable()) archive_reader = NewAsciiReader(f) foo_file = archive_reader.next_file() self.assertEqual(foo_file.hdr.name, 'foo') foobar_file = archive_reader.next_file() self.assertEqual(foobar_file.hdr.name, 'foobar') # read around in both files self.assertEqual(foobar_file.read(7), 'This is') self.assertRaises(IOError, foo_file.read, 3) self.assertEqual(foobar_file.read(6), ' file\n') # read rest of file foo self.assertRaises(IOError, foo_file.read) # read rest of file foobar self.assertEqual(foobar_file.read(), 'bar.\n')