Skip to content

Commit 748ac63

Browse files
committed
1 parent 85811ab commit 748ac63

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

Lib/test/test_zipfile/test_core.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3158,6 +3158,10 @@ def test_trace_compressed_block_end_zlib(self):
31583158
def test_trace_compressed_block_end_bz2(self):
31593159
self._test_trace_compressed_block_end(zipfile.ZIP_BZIP2, OSError)
31603160

3161+
@requires_lzma()
3162+
def test_trace_compressed_block_end_lzma(self):
3163+
self._test_trace_compressed_block_end(zipfile.ZIP_LZMA, EOFError)
3164+
31613165
@requires_zstd()
31623166
def test_trace_compressed_block_end_zstd(self):
31633167
import compression.zstd
@@ -3226,6 +3230,86 @@ def _test_trace_compressed_block_end(self, method, exc_cls):
32263230
comp_len,
32273231
)
32283232

3233+
def test_calc_local_file_entry_size(self):
3234+
repacker = zipfile._ZipRepacker()
3235+
3236+
# basic
3237+
fz = io.BytesIO()
3238+
with zipfile.ZipFile(fz, 'w') as zh:
3239+
with zh.open('file.txt', 'w') as fh:
3240+
fh.write(b'dummy')
3241+
zi = zh.infolist()[-1]
3242+
3243+
self.assertEqual(
3244+
repacker._calc_local_file_entry_size(fz, zi),
3245+
43,
3246+
)
3247+
3248+
# data descriptor
3249+
fz = io.BytesIO()
3250+
with zipfile.ZipFile(Unseekable(fz), 'w') as zh:
3251+
with zh.open('file.txt', 'w') as fh:
3252+
fh.write(b'dummy')
3253+
zi = zh.infolist()[-1]
3254+
3255+
self.assertEqual(
3256+
repacker._calc_local_file_entry_size(fz, zi),
3257+
59,
3258+
)
3259+
3260+
# data descriptor (unsigned)
3261+
fz = io.BytesIO()
3262+
with zipfile.ZipFile(Unseekable(fz), 'w') as zh:
3263+
with mock.patch.object(struct, 'pack', side_effect=struct_pack_no_dd_sig), \
3264+
zh.open('file.txt', 'w') as fh:
3265+
fh.write(b'dummy')
3266+
zi = zh.infolist()[-1]
3267+
3268+
self.assertEqual(
3269+
repacker._calc_local_file_entry_size(fz, zi),
3270+
55,
3271+
)
3272+
3273+
def test_calc_local_file_entry_size_zip64(self):
3274+
repacker = zipfile._ZipRepacker()
3275+
3276+
# zip64
3277+
fz = io.BytesIO()
3278+
with zipfile.ZipFile(fz, 'w') as zh:
3279+
with zh.open('file.txt', 'w', force_zip64=True) as fh:
3280+
fh.write(b'dummy')
3281+
zi = zh.infolist()[-1]
3282+
3283+
self.assertEqual(
3284+
repacker._calc_local_file_entry_size(fz, zi),
3285+
63,
3286+
)
3287+
3288+
# data descriptor + zip64
3289+
fz = io.BytesIO()
3290+
with zipfile.ZipFile(Unseekable(fz), 'w') as zh:
3291+
with zh.open('file.txt', 'w', force_zip64=True) as fh:
3292+
fh.write(b'dummy')
3293+
zi = zh.infolist()[-1]
3294+
3295+
self.assertEqual(
3296+
repacker._calc_local_file_entry_size(fz, zi),
3297+
87,
3298+
)
3299+
3300+
# data descriptor (unsigned) + zip64
3301+
fz = io.BytesIO()
3302+
with zipfile.ZipFile(Unseekable(fz), 'w') as zh:
3303+
with mock.patch.object(struct, 'pack', side_effect=struct_pack_no_dd_sig), \
3304+
zh.open('file.txt', 'w', force_zip64=True) as fh:
3305+
fh.write(b'dummy')
3306+
zi = zh.infolist()[-1]
3307+
3308+
self.assertEqual(
3309+
repacker._calc_local_file_entry_size(fz, zi),
3310+
83,
3311+
)
3312+
32293313
def test_copy_bytes(self):
32303314
repacker = zipfile._ZipRepacker()
32313315

0 commit comments

Comments
 (0)