| #!/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_conflct else 'BBBBB') | 
 |     z.writestr('file3', 'CCCCC') | 
 |   return zip1, zip2 | 
 |  | 
 |  | 
 | class ZipHelpersTest(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() |