| #!/usr/bin/env python3 |
| # Copyright 2022 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Tests for check_clang_diags.""" |
| |
| import unittest |
| from unittest import mock |
| |
| from cros_utils import bugs |
| |
| import check_clang_diags |
| |
| # pylint: disable=protected-access |
| |
| |
| class Test(unittest.TestCase): |
| """Test class.""" |
| |
| def test_process_new_diagnostics_ignores_new_tools(self): |
| new_state, new_diags = check_clang_diags._process_new_diagnostics( |
| old={}, |
| new={'clang': ['-Wone', '-Wtwo']}, |
| ) |
| self.assertEqual(new_state, {'clang': ['-Wone', '-Wtwo']}) |
| self.assertEqual(new_diags, {}) |
| |
| def test_process_new_diagnostics_is_a_nop_when_no_changes(self): |
| new_state, new_diags = check_clang_diags._process_new_diagnostics( |
| old={'clang': ['-Wone', '-Wtwo']}, |
| new={'clang': ['-Wone', '-Wtwo']}, |
| ) |
| self.assertEqual(new_state, {'clang': ['-Wone', '-Wtwo']}) |
| self.assertEqual(new_diags, {}) |
| |
| def test_process_new_diagnostics_ignores_removals_and_readds(self): |
| new_state, new_diags = check_clang_diags._process_new_diagnostics( |
| old={'clang': ['-Wone', '-Wtwo']}, |
| new={'clang': ['-Wone']}, |
| ) |
| self.assertEqual(new_diags, {}) |
| new_state, new_diags = check_clang_diags._process_new_diagnostics( |
| old=new_state, |
| new={'clang': ['-Wone', '-Wtwo']}, |
| ) |
| self.assertEqual(new_state, {'clang': ['-Wone', '-Wtwo']}) |
| self.assertEqual(new_diags, {}) |
| |
| def test_process_new_diagnostics_complains_when_warnings_are_added(self): |
| new_state, new_diags = check_clang_diags._process_new_diagnostics( |
| old={'clang': ['-Wone']}, |
| new={'clang': ['-Wone', '-Wtwo']}, |
| ) |
| self.assertEqual(new_state, {'clang': ['-Wone', '-Wtwo']}) |
| self.assertEqual(new_diags, {'clang': ['-Wtwo']}) |
| |
| @mock.patch.object(bugs, 'CreateNewBug') |
| def test_bugs_are_created_as_expected(self, create_new_bug_mock): |
| check_clang_diags._file_bugs_for_new_diags({ |
| 'clang': ['-Wone'], |
| 'clang-tidy': ['bugprone-foo'], |
| }) |
| |
| expected_calls = [ |
| mock.call( |
| component_id=bugs.WellKnownComponents.CrOSToolchainPublic, |
| title='Investigate clang check `-Wone`', |
| body='\n'.join(( |
| 'It seems that the `-Wone` check was recently added to clang.', |
| "It's probably good to TAL at whether this check would be good", |
| 'for us to enable in e.g., platform2, or across ChromeOS.', |
| )), |
| assignee=check_clang_diags._DEFAULT_ASSIGNEE, |
| cc=check_clang_diags._DEFAULT_CCS, |
| ), |
| mock.call( |
| component_id=bugs.WellKnownComponents.CrOSToolchainPublic, |
| title='Investigate clang-tidy check `bugprone-foo`', |
| body='\n'.join(( |
| 'It seems that the `bugprone-foo` check was recently added to ' |
| 'clang-tidy.', |
| "It's probably good to TAL at whether this check would be good", |
| 'for us to enable in e.g., platform2, or across ChromeOS.', |
| )), |
| assignee=check_clang_diags._DEFAULT_ASSIGNEE, |
| cc=check_clang_diags._DEFAULT_CCS, |
| ), |
| ] |
| |
| # Don't assertEqual the lists, since the diff is really hard to read for |
| # that. |
| for actual, expected in zip(create_new_bug_mock.call_args_list, |
| expected_calls): |
| self.assertEqual(actual, expected) |
| |
| self.assertEqual(len(create_new_bug_mock.call_args_list), |
| len(expected_calls)) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |