| #!/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 |
| import sys |
| import unittest |
| |
| import PRESUBMIT |
| |
| # Append chrome source root to import `PRESUBMIT_test_mocks.py`. |
| sys.path.append( |
| os.path.dirname( |
| os.path.dirname( |
| os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) |
| from PRESUBMIT_test_mocks import MockAffectedFile, MockInputApi, MockOutputApi |
| |
| _PARTITION_ALLOC_BASE_PATH = 'base/allocator/partition_allocator/src/' |
| |
| |
| class PartitionAllocIncludeGuardsTest(unittest.TestCase): |
| |
| def _CheckForIncludeGuardsWithMock(self, filename, lines): |
| mock_input_api = MockInputApi() |
| mock_input_api.files = [MockAffectedFile(filename, lines)] |
| mock_output_api = MockOutputApi() |
| return PRESUBMIT.CheckForIncludeGuards(mock_input_api, mock_output_api) |
| |
| def testExpectedGuardNameDoesNotError(self): |
| lines = [ |
| '#ifndef PARTITION_ALLOC_RANDOM_H_', |
| '#define PARTITION_ALLOC_RANDOM_H_', |
| '#endif // PARTITION_ALLOC_RANDOM_H_' |
| ] |
| errors = self._CheckForIncludeGuardsWithMock( |
| _PARTITION_ALLOC_BASE_PATH + 'partition_alloc/random.h', lines) |
| self.assertEqual(0, len(errors)) |
| |
| def testMissingGuardErrors(self): |
| lines = [] |
| errors = self._CheckForIncludeGuardsWithMock( |
| _PARTITION_ALLOC_BASE_PATH + 'partition_alloc/random.h', lines) |
| self.assertEqual(1, len(errors)) |
| self.assertIn('Missing include guard', errors[0].message) |
| self.assertIn('Recommended name: PARTITION_ALLOC_RANDOM_H_', |
| errors[0].message) |
| |
| def testMissingGuardInNonHeaderFileDoesNotError(self): |
| lines = [] |
| errors = self._CheckForIncludeGuardsWithMock( |
| _PARTITION_ALLOC_BASE_PATH + 'partition_alloc/random.cc', lines) |
| self.assertEqual(0, len(errors)) |
| |
| def testGuardNotCoveringWholeFileErrors(self): |
| lines = [ |
| '#ifndef PARTITION_ALLOC_RANDOM_H_', |
| '#define PARTITION_ALLOC_RANDOM_H_', |
| '#endif // PARTITION_ALLOC_RANDOM_H_', |
| 'int oh_i_forgot_to_guard_this;' |
| ] |
| errors = self._CheckForIncludeGuardsWithMock( |
| _PARTITION_ALLOC_BASE_PATH + 'partition_alloc/random.h', lines) |
| self.assertEqual(1, len(errors)) |
| self.assertIn('not covering the whole file', errors[0].message) |
| |
| def testMissingDefineInGuardErrors(self): |
| lines = [ |
| '#ifndef PARTITION_ALLOC_RANDOM_H_', |
| 'int somehow_put_here;' |
| '#define PARTITION_ALLOC_RANDOM_H_', |
| '#endif // PARTITION_ALLOC_RANDOM_H_', |
| ] |
| errors = self._CheckForIncludeGuardsWithMock( |
| _PARTITION_ALLOC_BASE_PATH + 'partition_alloc/random.h', lines) |
| self.assertEqual(1, len(errors)) |
| self.assertIn( |
| 'Missing "#define PARTITION_ALLOC_RANDOM_H_" for include guard', |
| errors[0].message) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |