diff --git a/neutron_lib/hacking/checks.py b/neutron_lib/hacking/checks.py index affd51d32..e5af5cef0 100644 --- a/neutron_lib/hacking/checks.py +++ b/neutron_lib/hacking/checks.py @@ -36,9 +36,9 @@ namespace_imports_from_root = re.compile(r"from[\s]+([\w]+)[\s]+import[\s]+") contextlib_nested = re.compile(r"^\s*with (contextlib\.)?nested\(") assert_equal_none_re = re.compile( - r"assertEqual\(.*?,\s+None\)|assertEqual\(None,") + r"assertEqual\(.*?,\s+None\)(( |\t)*#.*)?$|assertEqual\(None,") assert_is_none_re = re.compile( - r"assertIs(Not)?\(.*,\s+None\)|assertIs(Not)?\(None,") + r"assertIs(Not)?\(.*,\s+None\)(( |\t)*#.*)?$|assertIs(Not)?\(None,") def use_jsonutils(logical_line, filename): diff --git a/neutron_lib/tests/unit/hacking/test_checks.py b/neutron_lib/tests/unit/hacking/test_checks.py index 53acfba9f..31fe36e16 100644 --- a/neutron_lib/tests/unit/hacking/test_checks.py +++ b/neutron_lib/tests/unit/hacking/test_checks.py @@ -188,6 +188,14 @@ class HackingTestCase(base.BaseTestCase): "self.assertEqual(None, A)"))), 1) self.assertEqual(len(list(checks.assert_equal_none( "self.assertEqual(None, A) # Comment"))), 1) + self.assertEqual(len(list(checks.assert_equal_none( + "self.assertEqual((None, None), A)"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "self.assertEqual((None, None), A) # Comment"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "self.assertEqual(A, (None, None))"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "self.assertEqual(A, (None, None)) # Comment"))), 0) self.assertEqual(len(list(checks.assert_equal_none( "assertIsNot(A, None)"))), 1) self.assertEqual(len(list(checks.assert_equal_none( @@ -196,6 +204,14 @@ class HackingTestCase(base.BaseTestCase): "assertIsNot(None, A)"))), 1) self.assertEqual(len(list(checks.assert_equal_none( "assertIsNot(None, A) # Comment"))), 1) + self.assertEqual(len(list(checks.assert_equal_none( + "assertIsNot((None, None), A)"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "assertIsNot((None, None), A) # Comment"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "assertIsNot(A, (None, None))"))), 0) + self.assertEqual(len(list(checks.assert_equal_none( + "assertIsNot(A, (None, None)) # Comment"))), 0) self.assertEqual( len(list(checks.assert_equal_none("self.assertIsNone(A)"))), 0) self.assertEqual( diff --git a/releasenotes/notes/update-hacking-check-n536-2f63898bea693125.yaml b/releasenotes/notes/update-hacking-check-n536-2f63898bea693125.yaml new file mode 100644 index 000000000..f558eed03 --- /dev/null +++ b/releasenotes/notes/update-hacking-check-n536-2f63898bea693125.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Update hacking check ``N536``. Current implementation recognizes + ``self.assertEqual((None, None), A)`` as invalid incorrectly while + ``(None, None)`` is not ``None``.