Skip to content

Commit 57cb51c

Browse files
committed
update unittest
1 parent 1a64610 commit 57cb51c

File tree

2 files changed

+19
-66
lines changed

2 files changed

+19
-66
lines changed

Lib/test/test_zipfile/test_core.py

Lines changed: 18 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -3447,100 +3447,53 @@ def test_too_short(self):
34473447
self.assertEqual(
34483448
b"zzz", zipfile._Extra.strip(b"zzz", (self.ZIP64_EXTRA,)))
34493449

3450-
class StoreSeekReadTest(unittest.TestCase):
3451-
def test_store_seek_read(self):
3452-
class StatIO(io.RawIOBase):
3453-
def __init__(self, buf: bytes):
3450+
class StoredZipExtFileRandomAccessTest(unittest.TestCase):
3451+
def test_random_access(self):
3452+
from _pyio import BytesIO
3453+
class StatIO(BytesIO):
3454+
def __init__(self):
3455+
super().__init__()
34543456
self.bytes_read = 0
3455-
self.buffer = buf
3456-
self.pos = 0
3457-
self.eof = False
3458-
3459-
def readinto(self, buffer, /):
3460-
if self.eof:
3461-
return 0
3462-
sz = min(len(buffer), len(self.buffer) - self.pos)
3463-
buffer[:sz] = self.buffer[self.pos:self.pos + sz]
3464-
self.pos += sz
3465-
self.bytes_read += sz
3466-
self.eof = self.pos == len(self.buffer)
3467-
return sz
3468-
3469-
def readall(self):
3470-
if self.eof:
3471-
return b''
3472-
self.eof = True
3473-
self.bytes_read += len(self.buffer) - self.pos
3474-
ret = self.buffer[self.pos:]
3475-
self.pos = len(self.buffer)
3476-
return ret
3477-
3478-
def seek(self, offset, whence=os.SEEK_SET, /):
3479-
if whence == os.SEEK_CUR:
3480-
new_pos = self.pos + offset
3481-
elif whence == os.SEEK_SET:
3482-
new_pos = offset
3483-
elif whence == os.SEEK_END:
3484-
new_pos = len(self.buffer) + offset
3485-
else:
3486-
raise ValueError("unsupported whence")
3487-
3488-
if new_pos < 0:
3489-
new_pos = 0
3490-
elif new_pos > len(self.buffer):
3491-
new_pos = len(self.buffer)
3492-
3493-
self.eof = new_pos == len(self.buffer)
3494-
self.pos = new_pos
3495-
return new_pos
3496-
3497-
def tell(self):
3498-
return self.pos
34993457

3500-
def readable(self):
3501-
return True
3502-
3503-
def writable(self):
3504-
return False
3505-
3506-
def seekable(self):
3507-
return True
3458+
def read(self, size=-1):
3459+
bs = super().read(size)
3460+
self.bytes_read += len(bs)
3461+
return bs
35083462

35093463
def get_bytes_read(self):
35103464
return self.bytes_read
35113465

3512-
bio = io.BytesIO()
3466+
sio = StatIO()
3467+
# 100000 bytes
35133468
txt = b'0123456789'*10000
35143469

35153470
# Check seek on a file
3516-
with zipfile.ZipFile(bio, "w") as zipf:
3517-
zipf.writestr("foo.txt", txt) # 100000 bytes
3471+
with zipfile.ZipFile(sio, "w", compression=zipfile.ZIP_STORED) as zipf:
3472+
zipf.writestr("foo.txt", txt)
35183473

3519-
sio = StatIO(bio.getvalue())
35203474
with zipfile.ZipFile(sio, "r") as zipf:
35213475
with zipf.open("foo.txt", "r") as fp:
35223476
br = sio.get_bytes_read()
35233477
fp.seek(50000, os.SEEK_CUR)
3524-
self.assertEqual(sio.get_bytes_read() - br, 0, 'seek produces extra read!')
3478+
self.assertEqual(sio.get_bytes_read() - br, 0, 'seek produces redundant read!')
35253479

35263480
b = fp.read(100)
35273481
self.assertEqual(b, txt[:100])
35283482

3483+
# seek length must be greater than ZipExtFile.MIN_READ_SIZE (4096)
35293484
# backward seek
3530-
# seek length must be more than MIN_READ_SIZE (4096)
35313485
br = sio.get_bytes_read()
35323486
fp.seek(5000, os.SEEK_CUR)
35333487
b = fp.read(100)
35343488
self.assertEqual(b, txt[50000:50100])
3535-
self.assertLessEqual(sio.get_bytes_read() - br, 4096, 'read more bytes after backward seek!')
3489+
self.assertLessEqual(sio.get_bytes_read() - br, 4096, 'read redundant bytes during backward seek!')
35363490

35373491
# forward seek
3538-
# seek length must be more than MIN_READ_SIZE (4096)
35393492
br = sio.get_bytes_read()
35403493
fp.seek(-40000, os.SEEK_CUR)
35413494
b = fp.read(100)
35423495
self.assertEqual(b, txt[10100:10200])
3543-
self.assertLessEqual(sio.get_bytes_read() - br, 4096, 'read more bytes after forward seek!')
3496+
self.assertLessEqual(sio.get_bytes_read() - br, 4096, 'read redundant bytes during forward seek!')
35443497

35453498
if __name__ == "__main__":
35463499
unittest.main()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Support forward seek in uncompressed unencrypted :class:`!zipfile.ZipExtFile`.
1+
Support fast forward seek in uncompressed unencrypted :class:`!zipfile.ZipExtFile`.

0 commit comments

Comments
 (0)