def test_is_iterable_where(self, value): pred = is_iterable_where(is_eq(True), is_eq(False)) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(value), pred.explain(value).valid) with self.subTest('pred correct'): self.assertEqual(pred(value), value in (correct_tuple, correct_list))
def test_wrapper_predicate(self): wrapper = Wrapper() with self.assertRaises(TypeError): wrapper(None) wrapper.wrap(is_eq(0)) self._test(wrapper, 0, True) wrapper.wrap(is_eq(1)) self._test(wrapper, 0, False)
def test_is_object_where(self, value): pred = is_object_where(foo=is_eq(True), bar=is_eq(False)) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(value), pred.explain(value).valid) with self.subTest('pred correct'): self.assertEqual( pred(value), (isinstance(value, object) and getattr(value, 'foo', False) and not getattr(value, 'bar', True)))
def test_is_superdict_where(self, value): pred = is_superdict_where(foo=is_eq(True), bar=is_eq(False)) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(value), pred.explain(value).valid) with self.subTest('pred correct'): self.assertEqual( pred(value), isinstance(value, dict) and all(key in value and val == value[key] for key, val in correct_dict.items()))
def test_is_set_of(self, value): pred = is_set_of(is_eq(True)) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(value), pred.explain(value).valid) with self.subTest('pred correct'): self.assertEqual(pred(value), isinstance(value, set) and all(value))
def test_correct(self): pred = is_eq(Get('a')) for context, value, expected in [ ({ 'a': 0 }, 0, True), ({ 'a': 0 }, 1, False), ({ 'a': 1 }, 0, False), ({ 'a': 1 }, 1, True), ({ 'b': 1 }, 1, False), ({}, 1, False), ]: with self.subTest( 'explain=True == explain=False; {}; {}; {}'.format( context, value, expected)): self.assertEqual(pred(value, context=context), pred.explain(value, context).valid) with self.subTest('pred correct; {}; {}; {}'.format( context, value, expected)): self.assertEqual(pred(value, context=context), expected)
def test_create_is_all_with_ands(self): preds = [is_eq(i) for i in range(5)] normal = is_all(*preds) with_ands = preds[0] for pred in preds[1:]: with_ands = with_ands & pred self.assertEqual(normal._predicates, with_ands._predicates)
def test_nested_is_all_flattens(self): predicates = [is_eq(i) for i in range(5)] predicate = is_all( predicates[0], is_all( predicates[1], is_all( predicates[2], predicates[3], ), ), predicates[4], ) self.assertEqual(predicate._predicates, predicates)
def test_is_dict_where(self, value): pred = is_dict_where(foo=is_eq(True), bar=is_eq(False)) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(value), pred.explain(value).valid) with self.subTest('pred correct'): self.assertEqual(pred(value), value == correct_dict)
def test_eq(self, a, b): pred = is_eq(a) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(b), pred.explain(b).valid) with self.subTest('pred correct'): self.assertEqual(pred(b), a == b)
def test_eq_to_self(self, a): pred = is_eq(a) with self.subTest('explain=True == explain=False'): self.assertEqual(pred(a), pred.explain(a).valid) with self.subTest('pred correct'): self.assertEqual(pred(a), a == a)