summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-02-05 17:13:04 +0000
committerGerrit Code Review <review@openstack.org>2015-02-05 17:13:04 +0000
commit9e304ebe26b3ecd2f8738fa7c10104e8680dfec0 (patch)
tree477896b066e72dc7c06297534052671a9b11c12a
parent84ab1720aa908bce1936df629a6479b8dd52ceca (diff)
parent16774b6d33bda4fe356d14619c843e1d55722e40 (diff)
downloadnova-2015.1.0b2.tar.gz
Merge "Added hacking rule for assertEqual(a in b, True/False)."2015.1.0b2
-rw-r--r--HACKING.rst3
-rw-r--r--nova/hacking/checks.py19
-rw-r--r--nova/tests/unit/test_hacking.py37
-rw-r--r--nova/tests/unit/test_nova_manage.py2
4 files changed, 60 insertions, 1 deletions
diff --git a/HACKING.rst b/HACKING.rst
index f96b9dfb9f..3e58dc52ad 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -47,6 +47,9 @@ Nova Specific Commandments
- [N335] Check for usage of deprecated assertRaisesRegexp
- [N336] Must use a dict comprehension instead of a dict constructor with a sequence of key-value pairs.
- [N337] Don't import translation in tests
+- [N338] Change assertEqual(A in B, True), assertEqual(True, A in B),
+ assertEqual(A in B, False) or assertEqual(False, A in B) to the more specific
+ assertIn/NotIn(A, B)
Creating Unit Tests
-------------------
diff --git a/nova/hacking/checks.py b/nova/hacking/checks.py
index e893f0ec3d..4b56e4d551 100644
--- a/nova/hacking/checks.py
+++ b/nova/hacking/checks.py
@@ -50,6 +50,10 @@ asse_trueinst_re = re.compile(
asse_equal_type_re = re.compile(
r"(.)*assertEqual\(type\((\w|\.|\'|\"|\[|\])+\), "
"(\w|\.|\'|\"|\[|\])+\)")
+asse_equal_in_end_with_true_or_false_re = re.compile(r"assertEqual\("
+ r"(\w|[][.'\"])+ in (\w|[][.'\", ])+, (True|False)\)")
+asse_equal_in_start_with_true_or_false_re = re.compile(r"assertEqual\("
+ r"(True|False), (\w|[][.'\"])+ in (\w|[][.'\", ])+\)")
asse_equal_end_with_none_re = re.compile(
r"assertEqual\(.*?,\s+None\)$")
asse_equal_start_with_none_re = re.compile(
@@ -511,6 +515,20 @@ def dict_constructor_with_list_copy(logical_line):
yield (0, msg)
+def assert_equal_in(logical_line):
+ """Check for assertEqual(A in B, True), assertEqual(True, A in B),
+ assertEqual(A in B, False) or assertEqual(False, A in B) sentences
+
+ N338
+ """
+ res = (asse_equal_in_start_with_true_or_false_re.search(logical_line) or
+ asse_equal_in_end_with_true_or_false_re.search(logical_line))
+ if res:
+ yield (0, "N338: Use assertIn/NotIn(A, B) rather than "
+ "assertEqual(A in B, True/False) when checking collection "
+ "contents.")
+
+
def factory(register):
register(import_no_db_in_virt)
register(no_db_session_in_public_api)
@@ -536,3 +554,4 @@ def factory(register):
register(check_oslo_namespace_imports)
register(assert_true_or_false_with_in)
register(dict_constructor_with_list_copy)
+ register(assert_equal_in)
diff --git a/nova/tests/unit/test_hacking.py b/nova/tests/unit/test_hacking.py
index c7ddafb1b7..5123687911 100644
--- a/nova/tests/unit/test_hacking.py
+++ b/nova/tests/unit/test_hacking.py
@@ -121,6 +121,43 @@ class HackingTestCase(test.NoDBTestCase):
self.assertEqual(
len(list(checks.assert_equal_type("self.assertTrue()"))), 0)
+ def test_assert_equal_in(self):
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(a in b, True)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual('str' in 'string', True)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(any(a==1 for a in b), True)"))), 0)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(True, a in b)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(True, 'str' in 'string')"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(True, any(a==1 for a in b))"))), 0)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(a in b, False)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual('str' in 'string', False)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(any(a==1 for a in b), False)"))), 0)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(False, a in b)"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(False, 'str' in 'string')"))), 1)
+
+ self.assertEqual(len(list(checks.assert_equal_in(
+ "self.assertEqual(False, any(a==1 for a in b))"))), 0)
+
def test_assert_equal_none(self):
self.assertEqual(len(list(checks.assert_equal_none(
"self.assertEqual(A, None)"))), 1)
diff --git a/nova/tests/unit/test_nova_manage.py b/nova/tests/unit/test_nova_manage.py
index 8c4eb7edcf..d1ec80ac4a 100644
--- a/nova/tests/unit/test_nova_manage.py
+++ b/nova/tests/unit/test_nova_manage.py
@@ -322,7 +322,7 @@ class ProjectCommandsTestCase(test.TestCase):
sys.stdout = sys.__stdout__
result = output.getvalue()
print_format = "%-36s %-10s" % ('instances', 'unlimited')
- self.assertEqual((print_format in result), True)
+ self.assertIn(print_format, result)
def test_quota_update_invalid_key(self):
self.assertEqual(2, self.commands.quota('admin', 'volumes1', '10'))