Esempio n. 1
0
    def test_Expr_with_Expr_in_expr_attribute(self):
        as_expr = unittest.mock.Mock()
        as_expr.side_effect = xso_query.as_expr

        e_nested = unittest.mock.sentinel.e_nested

        e = unittest.mock.Mock(spec=xso_query.Expr)
        e.expr = e_nested
        self.assertTrue(hasattr(e, "expr"))

        with unittest.mock.patch(
                "aioxmpp.xso.query.as_expr",
                new=as_expr):
            result = xso_query.as_expr(
                e,
                lhs=unittest.mock.sentinel.lhs
            )

        self.assertIs(result, e)

        self.assertSequenceEqual(
            as_expr.mock_calls,
            [
                unittest.mock.call(e,
                                   lhs=unittest.mock.sentinel.lhs),
                unittest.mock.call(e_nested,
                                   lhs=unittest.mock.sentinel.lhs),
            ]
        )
Esempio n. 2
0
    def test_PreExpr(self):
        pe = unittest.mock.Mock(spec=xso_query.PreExpr)
        result = xso_query.as_expr(pe)

        pe.xq_instantiate.assert_called_with(None)

        self.assertEqual(
            result,
            pe.xq_instantiate(),
        )
Esempio n. 3
0
    def test_PreExpr(self):
        pe = unittest.mock.Mock(spec=xso_query.PreExpr)
        result = xso_query.as_expr(pe)

        pe.xq_instantiate.assert_called_with(None)

        self.assertEqual(
            result,
            pe.xq_instantiate(),
        )
Esempio n. 4
0
    def test_PreExpr_with_context(self):
        expr = unittest.mock.sentinel.expr
        pe = unittest.mock.Mock(spec=xso_query.PreExpr)
        result = xso_query.as_expr(pe, expr)

        pe.xq_instantiate.assert_called_with(expr)

        self.assertEqual(
            result,
            pe.xq_instantiate(),
        )
Esempio n. 5
0
    def test_PreExpr_with_context(self):
        expr = unittest.mock.sentinel.expr
        pe = unittest.mock.Mock(spec=xso_query.PreExpr)
        result = xso_query.as_expr(pe, expr)

        pe.xq_instantiate.assert_called_with(expr)

        self.assertEqual(
            result,
            pe.xq_instantiate(),
        )
Esempio n. 6
0
    def test_arbitrary_type(self):
        vs = [
            unittest.mock.sentinel.thing,
            1,
            2,
            "foo",
            1.2,
        ]

        for v in vs:
            with unittest.mock.patch("aioxmpp.xso.query.Constant") as C:
                result = xso_query.as_expr(v)

            C.assert_called_with(v)
            self.assertEqual(result, C())
Esempio n. 7
0
    def test_arbitrary_type(self):
        vs = [
            unittest.mock.sentinel.thing,
            1,
            2,
            "foo",
            1.2,
        ]

        for v in vs:
            with unittest.mock.patch("aioxmpp.xso.query.Constant") as C:
                result = xso_query.as_expr(v)

            C.assert_called_with(v)
            self.assertEqual(
                result,
                C()
            )
Esempio n. 8
0
    def test_Expr_with_Expr_in_expr_attribute(self):
        as_expr = unittest.mock.Mock()
        as_expr.side_effect = xso_query.as_expr

        e_nested = unittest.mock.sentinel.e_nested

        e = unittest.mock.Mock(spec=xso_query.Expr)
        e.expr = e_nested
        self.assertTrue(hasattr(e, "expr"))

        with unittest.mock.patch("aioxmpp.xso.query.as_expr", new=as_expr):
            result = xso_query.as_expr(e, lhs=unittest.mock.sentinel.lhs)

        self.assertIs(result, e)

        self.assertSequenceEqual(as_expr.mock_calls, [
            unittest.mock.call(e, lhs=unittest.mock.sentinel.lhs),
            unittest.mock.call(e_nested, lhs=unittest.mock.sentinel.lhs),
        ])
Esempio n. 9
0
    def test_as_expr_recursively_resolves_lhses(self):
        new_lhs = unittest.mock.sentinel.new_lhs

        cls = xso_query.Class()
        descriptor = xso_query.BoundDescriptor(
            cls,
            unittest.mock.sentinel.descriptor,
            xso_query.GetDescriptor,
        )

        result = xso_query.as_expr(descriptor, lhs=new_lhs)

        self.assertIsInstance(
            result,
            xso_query.GetDescriptor,
        )

        self.assertEqual(
            result.descriptor,
            unittest.mock.sentinel.descriptor,
        )

        self.assertIsInstance(
            result.expr,
            xso_query.GetInstances,
        )

        self.assertEqual(
            result.expr.class_,
            cls,
        )

        self.assertEqual(
            result.expr.expr,
            new_lhs,
        )
Esempio n. 10
0
    def test_as_expr_recursively_resolves_lhses(self):
        new_lhs = unittest.mock.sentinel.new_lhs

        cls = xso_query.Class()
        descriptor = xso_query.BoundDescriptor(
            cls,
            unittest.mock.sentinel.descriptor,
            xso_query.GetDescriptor,
        )

        result = xso_query.as_expr(descriptor, lhs=new_lhs)

        self.assertIsInstance(
            result,
            xso_query.GetDescriptor,
        )

        self.assertEqual(
            result.descriptor,
            unittest.mock.sentinel.descriptor,
        )

        self.assertIsInstance(
            result.expr,
            xso_query.GetInstances,
        )

        self.assertEqual(
            result.expr.class_,
            cls,
        )

        self.assertEqual(
            result.expr.expr,
            new_lhs,
        )
Esempio n. 11
0
    def test_xsopath(self):
        xso = RootXSO()
        xso.attr = "root"

        f = FooXSO()
        f.attr = "foo1"
        xso.children.append(f)

        f = BazXSO()
        f.attr2 = "baz1"
        xso.children.append(f)

        f = FooXSO()
        f.attr = "foo2"
        xso.children.append(f)

        f = FooXSO()
        f.attr = "bar1/foo"
        b = BarXSO()
        b.child = f
        xso.children.append(b)

        ec = xso_query.EvaluationContext()
        ec.set_toplevel_object(xso)

        query = xso_query.as_expr(RootXSO.children / BarXSO.child /
                                  FooXSO.attr)

        self.assertSequenceEqual(list(query.eval(ec)), ["bar1/foo"])

        query = xso_query.as_expr(RootXSO.children / FooXSO.attr)

        self.assertSequenceEqual(list(query.eval(ec)), ["foo1", "foo2"])

        query = xso_query.as_expr(RootXSO.children / FooXSO)

        self.assertSequenceEqual(
            list(query.eval(ec)),
            list(filter(lambda x: isinstance(x, FooXSO), xso.children)))

        query = xso_query.as_expr(RootXSO.children / FooXSO[::2])

        self.assertSequenceEqual(list(query.eval(ec)), [
            xso.children[0],
            xso.children[2],
        ])

        query = xso_query.as_expr(RootXSO.children /
                                  FooXSO[xso_query.where(FooXSO.attr)][:2])

        self.assertSequenceEqual(list(query.eval(ec)), [
            xso.children[0],
            xso.children[2],
        ])

        query = xso_query.as_expr(RootXSO.children /
                                  FooXSO[:2][xso_query.where(FooXSO.attr)])

        self.assertSequenceEqual(list(query.eval(ec)), [
            xso.children[0],
        ])

        query = xso_query.as_expr(RootXSO.children /
                                  FooXSO[xso_query.where(FooXSO.attr)][:2] /
                                  FooXSO.attr)

        self.assertSequenceEqual(list(query.eval(ec)), [
            "foo1",
            "foo2",
        ])

        query = xso_query.as_expr(RootXSO.children /
                                  FooXSO[:2][xso_query.where(FooXSO.attr)] /
                                  FooXSO.attr)

        self.assertSequenceEqual(list(query.eval(ec)), [
            "foo1",
        ])

        query = xso_query.as_expr(
            RootXSO.children /
            FooXSO[:2][xso_query.where(xso_query.not_(FooXSO.attr))])

        self.assertSequenceEqual(list(query.eval(ec)), [xso.children[1]])

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[xso_query.where(FooXSO.attr == "foo1")] /
            FooXSO.attr)

        self.assertSequenceEqual(list(query.eval(ec)), [
            "foo1",
        ])
Esempio n. 12
0
    def test_Expr(self):
        e = unittest.mock.Mock(spec=xso_query.Expr)
        result = xso_query.as_expr(e)

        self.assertIs(result, e)
Esempio n. 13
0
    def test_xsopath(self):
        xso = RootXSO()
        xso.attr = "root"

        f = FooXSO()
        f.attr = "foo1"
        xso.children.append(f)

        f = BazXSO()
        f.attr2 = "baz1"
        xso.children.append(f)

        f = FooXSO()
        f.attr = "foo2"
        xso.children.append(f)

        f = FooXSO()
        f.attr = "bar1/foo"
        b = BarXSO()
        b.child = f
        xso.children.append(b)

        ec = xso_query.EvaluationContext()
        ec.set_toplevel_object(xso)

        query = xso_query.as_expr(
            RootXSO.children / BarXSO.child / FooXSO.attr
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            ["bar1/foo"]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO.attr
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            ["foo1", "foo2"]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            list(filter(lambda x: isinstance(x, FooXSO), xso.children))
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[::2]
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                xso.children[0],
                xso.children[2],
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[xso_query.where(FooXSO.attr)][:2]
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                xso.children[0],
                xso.children[2],
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[:2][xso_query.where(FooXSO.attr)]
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                xso.children[0],
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[xso_query.where(FooXSO.attr)][:2] /
            FooXSO.attr
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                "foo1",
                "foo2",
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[:2][xso_query.where(FooXSO.attr)] /
            FooXSO.attr
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                "foo1",
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[:2][
                xso_query.where(xso_query.not_(FooXSO.attr))
            ]
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                xso.children[1]
            ]
        )

        query = xso_query.as_expr(
            RootXSO.children / FooXSO[xso_query.where(FooXSO.attr == "foo1")] /
            FooXSO.attr
        )

        self.assertSequenceEqual(
            list(query.eval(ec)),
            [
                "foo1",
            ]
        )
Esempio n. 14
0
    def test_Expr(self):
        e = unittest.mock.Mock(spec=xso_query.Expr)
        result = xso_query.as_expr(e)

        self.assertIs(result, e)