blob: a7889038f9a955efffe7c2d36c66fc83a674eaf2 [file] [log] [blame]
#!/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()