#!/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()