Browse Source

[test] Implement string "lambda x: condition(x)" as an expected value

Semantics equivalent to `assert condition(got)`
dirkf 3 years ago
parent
commit
2ced5a7912
1 changed files with 7 additions and 1 deletions
  1. 7 1
      test/helper.py

+ 7 - 1
test/helper.py

@@ -128,6 +128,12 @@ def expect_value(self, got, expected, field):
         self.assertTrue(
         self.assertTrue(
             contains_str in got,
             contains_str in got,
             'field %s (value: %r) should contain %r' % (field, got, contains_str))
             'field %s (value: %r) should contain %r' % (field, got, contains_str))
+    elif isinstance(expected, compat_str) and re.match(r'^lambda \w+:', expected):
+        fn = eval(expected)
+        suite = expected.split(':', 1)[1].strip()
+        self.assertTrue(
+            fn(got),
+            'Expected field %s to meet condition %s, but value %r failed ' % (field, suite, got))
     elif isinstance(expected, type):
     elif isinstance(expected, type):
         self.assertTrue(
         self.assertTrue(
             isinstance(got, expected),
             isinstance(got, expected),
@@ -137,7 +143,7 @@ def expect_value(self, got, expected, field):
     elif isinstance(expected, list) and isinstance(got, list):
     elif isinstance(expected, list) and isinstance(got, list):
         self.assertEqual(
         self.assertEqual(
             len(expected), len(got),
             len(expected), len(got),
-            'Expect a list of length %d, but got a list of length %d for field %s' % (
+            'Expected a list of length %d, but got a list of length %d for field %s' % (
                 len(expected), len(got), field))
                 len(expected), len(got), field))
         for index, (item_got, item_expected) in enumerate(zip(got, expected)):
         for index, (item_got, item_expected) in enumerate(zip(got, expected)):
             type_got = type(item_got)
             type_got = type(item_got)