Beispiel #1
0
    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, [])
Beispiel #2
0
    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)
Beispiel #3
0
    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,
            ),
        ])
Beispiel #4
0
    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,
            )
        ])