1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#!/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 datetime
import os.path
import sys
import tempfile
import unittest
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
from PRESUBMIT_test_mocks import MockInputApi, MockOutputApi
from build.ios import presubmit_support
_TEMP_FILELIST_CONTENTS = """# Copyright %d The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# NOTE: this file is generated by build/ios/update_bundle_filelist.py
# If it requires updating, you should get a presubmit error with
# instructions on how to regenerate. Otherwise, do not edit.
""" % (datetime.datetime.now().year)
_TEMP_GLOBLIST_CONTENTS = """**
-*.globlist
-*.filelist
"""
class BundleDataPresubmit(unittest.TestCase):
def setUp(self):
self.mock_input_api = MockInputApi()
self.mock_input_api.change.RepositoryRoot = lambda: os.path.join(
os.path.dirname(__file__), '..', '..')
self.mock_input_api.PresubmitLocalPath = lambda: os.path.dirname(__file__)
self.mock_output_api = MockOutputApi()
def testBasic(self):
"""
Checks that a glob can be expanded to build a file list and if it
matches the existing file list, we should see no error.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/basic', '.')
self.assertEqual([], results)
def testExclusion(self):
"""
Check that globs can be used to exclude files from file lists.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/exclusions', '.')
self.assertEqual([], results)
def testDifferentLocalPath(self):
"""
Checks the case where the presubmit directory is not the same as the
globroot, but it is still local (i.e., not relative to the repository
root)
"""
results = presubmit_support.CheckBundleData(
self.mock_input_api, self.mock_output_api,
'test_data/different_local_path', 'test_data')
self.assertEqual([], results)
def testRepositoryRelative(self):
"""
Checks the case where globs are relative to the repository root.
"""
results = presubmit_support.CheckBundleData(
self.mock_input_api, self.mock_output_api,
'test_data/repository_relative')
self.assertEqual([], results)
def testMissingFilesInFilelist(self):
"""
Checks that we do indeed return an error if the filelist is missing a
file. In this case, all of the test .filelist and .globlist files are
excluded.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/missing', '.')
self.assertEqual(1, len(results))
def testExtraFilesInFilelist(self):
"""
Checks the case where extra files have been included in the file list.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/extra', '.')
self.assertEqual(1, len(results))
def testOrderInsensitive(self):
"""
Checks that we do not trigger an error for cases where the file list is
correct, but in a different order than the globlist expansion.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/reorder', '.')
self.assertEqual([], results)
def testUnexpectedHeader(self):
"""
Checks an unexpected header in a file list causes an error.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/comment', '.')
self.assertEqual(1, len(results))
def testUntrackedFiles(self):
"""
Checks that the untracked files are correctly ignored.
"""
with tempfile.TemporaryDirectory() as temp_dir:
with open(os.path.join(temp_dir, 'untracked.filelist'), 'w') as f:
f.write(_TEMP_FILELIST_CONTENTS)
with open(os.path.join(temp_dir, 'untracked.globlist'), 'w') as f:
f.write(_TEMP_GLOBLIST_CONTENTS)
with open(os.path.join(temp_dir, 'untracked.txt'), 'w') as f:
f.write('Hello, World!')
path = os.path.join(temp_dir, 'untracked')
self.mock_input_api.change.RepositoryRoot = lambda: temp_dir
self.mock_input_api.PresubmitLocalPath = lambda: temp_dir
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'untracked')
self.assertEqual([], results)
def testExcludeDuplicates(self):
"""
Checks that duplicate filenames are not added to a filelist.
"""
results = presubmit_support.CheckBundleData(self.mock_input_api,
self.mock_output_api,
'test_data/duplicates', '.')
self.assertEqual([], results)
def testCheckOutsideGloblistDir(self):
"""
Checks that including files outside the globlist directory is an error.
"""
results = presubmit_support.CheckBundleData(
self.mock_input_api, self.mock_output_api,
'test_data/outside_globlist_dir', '.')
self.assertEqual(1, len(results))
def testCheckIgnoreOutsideGloblistDir(self):
"""
Checks that files outside the globlist directory can be ignored.
"""
results = presubmit_support.CheckBundleData(
self.mock_input_api, self.mock_output_api,
'test_data/ignore_outside_globlist_dir', '.')
self.assertEqual([], results)
if __name__ == '__main__':
unittest.main()
|