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), ] )
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(), )
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(), )
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())
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() )
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), ])
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, )
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", ])
def test_Expr(self): e = unittest.mock.Mock(spec=xso_query.Expr) result = xso_query.as_expr(e) self.assertIs(result, e)
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", ] )