diff options
Diffstat (limited to 'llvm_tools/check_clang_diags_test.py')
-rwxr-xr-x | llvm_tools/check_clang_diags_test.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/llvm_tools/check_clang_diags_test.py b/llvm_tools/check_clang_diags_test.py new file mode 100755 index 00000000..a7889038 --- /dev/null +++ b/llvm_tools/check_clang_diags_test.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# Copyright 2022 The ChromiumOS Authors +# 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 + +import check_clang_diags +from cros_utils import bugs + + +# 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() |