| #!/usr/bin/env python3 |
| # Copyright 2023 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import pathlib |
| import shutil |
| import sys |
| import tempfile |
| import unittest |
| import zipfile |
| |
| import zip_helpers |
| |
| |
| def _make_test_zips(tmp_dir, create_conflct=False): |
| zip1= os.path.join(tmp_dir,'A.zip') |
| zip2= os.path.join(tmp_dir,'B.zip') |
| with zipfile.ZipFile(zip1,'w')as z: |
| z.writestr('file1','AAAAA') |
| z.writestr('file2','BBBBB') |
| with zipfile.ZipFile(zip2,'w')as z: |
| z.writestr('file2','ABABA'if create_conflctelse'BBBBB') |
| z.writestr('file3','CCCCC') |
| return zip1, zip2 |
| |
| |
| classZipHelpersTest(unittest.TestCase): |
| def test_merge_zips__identical_file(self): |
| with tempfile.TemporaryDirectory()as tmp_dir: |
| zip1, zip2= _make_test_zips(tmp_dir) |
| |
| merged_zip= os.path.join(tmp_dir,'merged.zip') |
| zip_helpers.merge_zips(merged_zip,[zip1, zip2]) |
| |
| with zipfile.ZipFile(merged_zip)as z: |
| self.assertEqual(z.namelist(),['file1','file2','file3']) |
| |
| def test_merge_zips__conflict(self): |
| with tempfile.TemporaryDirectory()as tmp_dir: |
| zip1, zip2= _make_test_zips(tmp_dir, create_conflct=True) |
| |
| merged_zip= os.path.join(tmp_dir,'merged.zip') |
| with self.assertRaises(Exception): |
| zip_helpers.merge_zips(merged_zip,[zip1, zip2]) |
| |
| def test_merge_zips__conflict_with_append(self): |
| with tempfile.TemporaryDirectory()as tmp_dir: |
| zip1, zip2= _make_test_zips(tmp_dir, create_conflct=True) |
| |
| with self.assertRaises(Exception): |
| with zipfile.ZipFile(zip1,'a')as dst_zip: |
| zip_helpers.merge_zips(dst_zip,[zip2]) |
| |
| |
| if __name__=='__main__': |
| unittest.main() |