xref: /aosp_15_r20/external/angle/build/zip_helpers_unittest.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#!/usr/bin/env python3
2# Copyright 2023 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import os
7import pathlib
8import shutil
9import sys
10import tempfile
11import unittest
12import zipfile
13
14import zip_helpers
15
16
17def _make_test_zips(tmp_dir, create_conflct=False):
18  zip1 = os.path.join(tmp_dir, 'A.zip')
19  zip2 = os.path.join(tmp_dir, 'B.zip')
20  with zipfile.ZipFile(zip1, 'w') as z:
21    z.writestr('file1', 'AAAAA')
22    z.writestr('file2', 'BBBBB')
23  with zipfile.ZipFile(zip2, 'w') as z:
24    z.writestr('file2', 'ABABA' if create_conflct else 'BBBBB')
25    z.writestr('file3', 'CCCCC')
26  return zip1, zip2
27
28
29class ZipHelpersTest(unittest.TestCase):
30  def test_merge_zips__identical_file(self):
31    with tempfile.TemporaryDirectory() as tmp_dir:
32      zip1, zip2 = _make_test_zips(tmp_dir)
33
34      merged_zip = os.path.join(tmp_dir, 'merged.zip')
35      zip_helpers.merge_zips(merged_zip, [zip1, zip2])
36
37      with zipfile.ZipFile(merged_zip) as z:
38        self.assertEqual(z.namelist(), ['file1', 'file2', 'file3'])
39
40  def test_merge_zips__conflict(self):
41    with tempfile.TemporaryDirectory() as tmp_dir:
42      zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True)
43
44      merged_zip = os.path.join(tmp_dir, 'merged.zip')
45      with self.assertRaises(Exception):
46        zip_helpers.merge_zips(merged_zip, [zip1, zip2])
47
48  def test_merge_zips__conflict_with_append(self):
49    with tempfile.TemporaryDirectory() as tmp_dir:
50      zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True)
51
52      with self.assertRaises(Exception):
53        with zipfile.ZipFile(zip1, 'a') as dst_zip:
54          zip_helpers.merge_zips(dst_zip, [zip2])
55
56
57if __name__ == '__main__':
58  unittest.main()
59