aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/check_clang_diags_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_tools/check_clang_diags_test.py')
-rwxr-xr-xllvm_tools/check_clang_diags_test.py110
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()