| #!/usr/bin/env python3 |
| # Copyright 2024 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.path |
| import sys |
| import unittest |
| |
| import PRESUBMIT |
| |
| # Switch to src/ directory to import test mocks. |
| file_path = os.path.dirname(os.path.abspath(__file__)) |
| sys.path.insert(0, os.path.join(file_path, '..', '..', '..')) |
| from PRESUBMIT_test_mocks import (MockInputApi, MockOutputApi, MockAffectedFile, |
| MockFile) |
| |
| _CHROME_BROWSER_ASH = os.path.join('chrome', 'browser', 'ash') |
| |
| class DepsFileProhibitingChromeExistsFileTest(unittest.TestCase): |
| def assertDepsFilesWithErrors(self, input_api, expected_missing_deps_files, |
| expected_deps_files_missing_chrome): |
| # Restore path that was changed to import test mocks above. |
| input_api.presubmit_local_path = _CHROME_BROWSER_ASH |
| |
| # Create mock files for all affected files so that os_path.exists() works. |
| input_api.CreateMockFileInPath( |
| [x.LocalPath() for x in input_api.AffectedFiles(include_deletes=True)]) |
| |
| results = PRESUBMIT._CheckDepsFileProhibitingChromeExists( |
| input_api, MockOutputApi()) |
| self.assertTrue(len(results) <= 2) |
| |
| missing_deps_file_pattern = input_api.re.compile( |
| r'.*require a DEPS file.*\[(.*)\].*') |
| missing_chrome_rule_pattern = input_api.re.compile( |
| r'.*must prohibit new \/\/chrome dependencies.*\[(.*)\].*') |
| |
| missing_deps_files = [] |
| deps_files_missing_chrome = [] |
| |
| for r in results: |
| regex_results = missing_deps_file_pattern.search(r.message) |
| if regex_results: |
| missing_deps_files = regex_results.group(1).split(', ') |
| |
| regex_results = missing_chrome_rule_pattern.search(r.message) |
| if missing_chrome_rule_pattern.search(r.message): |
| deps_files_missing_chrome = regex_results.group(1).split(', ') |
| |
| self.assertEqual(set(missing_deps_files), set(expected_missing_deps_files)) |
| self.assertEqual(set(deps_files_missing_chrome), |
| set(expected_deps_files_missing_chrome)) |
| |
| # No files created; no errors expected. |
| def testNoFiles(self): |
| input_api = MockInputApi() |
| self.assertDepsFilesWithErrors(input_api, [], []) |
| |
| # Create files in new subdirectories without DEPS files. |
| def testFileInDirectoryWithNoDeps(self): |
| input_api = MockInputApi() |
| input_api.files = [ |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'bar.h'), ''), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'baz.h'), ''), |
| ] |
| self.assertDepsFilesWithErrors( |
| input_api, |
| [ |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'DEPS'), |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'DEPS'), |
| ], []) |
| |
| # Create files in a new subdirectories with DEPS files not prohibiting |
| # //chrome. |
| def testFileInDirectoryNotProhibitingChrome(self): |
| DEPS_FILE_NOT_PROHIBITING_CHROME = ['include_rules = []'] |
| |
| input_api = MockInputApi() |
| input_api.files = [ |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'bar.h'), ''), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'DEPS'), |
| DEPS_FILE_NOT_PROHIBITING_CHROME), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'baz.h'), ''), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'DEPS'), |
| DEPS_FILE_NOT_PROHIBITING_CHROME), |
| ] |
| self.assertDepsFilesWithErrors( |
| input_api, [], |
| [ |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'DEPS'), |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'DEPS'), |
| ]) |
| |
| # Create files in a new subdirectories with DEPS files prohibiting //chrome. |
| def testFilesWithDepsFilesProhibitingChrome(self): |
| DEPS_FILE_PROHIBITING_CHROME = ['include_rules = [ "-chrome", ]'] |
| |
| input_api = MockInputApi() |
| input_api.files = [ |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'bar.h'), ''), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'foo', 'DEPS'), |
| DEPS_FILE_PROHIBITING_CHROME), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'baz.h'), ''), |
| MockAffectedFile( |
| input_api.os_path.join(_CHROME_BROWSER_ASH, 'bar', 'DEPS'), |
| DEPS_FILE_PROHIBITING_CHROME), |
| ] |
| self.assertDepsFilesWithErrors(input_api, [], []) |
| |
| if __name__ == '__main__': |
| unittest.main() |