def test_eval_leaf_returns_false_if_no_ref_values(self): ec = unittest.mock.sentinel.ec def results(): return yield op = unittest.mock.Mock() op.side_effect = results() expr = unittest.mock.Mock() expr.eval_leaf.return_value = [ unittest.mock.sentinel.v1, unittest.mock.sentinel.v2, unittest.mock.sentinel.v3, ] ref_expr = unittest.mock.Mock() ref_expr.eval_leaf.return_value = [] co = xso_query.CmpOp(expr, ref_expr, op) result = co.eval_leaf(ec) self.assertFalse(result) self.assertSequenceEqual(expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(ref_expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(op.mock_calls, [])
def test_eval_returns_list_with_single_True_on_true(self): ec = unittest.mock.sentinel.ec expr = unittest.mock.sentinel.expr ref_expr = unittest.mock.sentinel.ref_expr op = unittest.mock.sentinel.op co = xso_query.CmpOp(expr, ref_expr, op) with unittest.mock.patch.object(co, "eval_leaf") as eval_leaf: eval_leaf.return_value = True self.assertSequenceEqual(list(co.eval(ec)), [True]) eval_leaf.assert_called_with(ec)
def test_eval_leaf_returns_true_if_any_matches(self): ec = unittest.mock.sentinel.ec def results(): yield False yield True yield False op = unittest.mock.Mock() op.side_effect = results() expr = unittest.mock.Mock() expr.eval_leaf.return_value = [ unittest.mock.sentinel.v1, unittest.mock.sentinel.v2, unittest.mock.sentinel.v3, ] ref_expr = unittest.mock.Mock() ref_expr.eval_leaf.return_value = [unittest.mock.sentinel.rv] co = xso_query.CmpOp(expr, ref_expr, op) result = co.eval_leaf(ec) self.assertTrue(result) self.assertSequenceEqual(expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(ref_expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(op.mock_calls, [ unittest.mock.call( unittest.mock.sentinel.v1, unittest.mock.sentinel.rv, ), unittest.mock.call( unittest.mock.sentinel.v2, unittest.mock.sentinel.rv, ), ])
def test_eval_leaf_cartesian_product(self): ec = unittest.mock.sentinel.ec def results(): while True: yield False op = unittest.mock.Mock() op.side_effect = results() expr = unittest.mock.Mock() expr.eval_leaf.return_value = [ unittest.mock.sentinel.v1, unittest.mock.sentinel.v2, unittest.mock.sentinel.v3, ] ref_expr = unittest.mock.Mock() ref_expr.eval_leaf.return_value = [ unittest.mock.sentinel.rv1, unittest.mock.sentinel.rv2, unittest.mock.sentinel.rv3, ] co = xso_query.CmpOp(expr, ref_expr, op) result = co.eval_leaf(ec) self.assertFalse(result) self.assertSequenceEqual(expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(ref_expr.mock_calls, [ unittest.mock.call.eval_leaf(ec), ]) self.assertSequenceEqual(op.mock_calls, [ unittest.mock.call(v1, v2) for v1, v2 in itertools.product( expr.eval_leaf.return_value, ref_expr.eval_leaf.return_value, ) ])