def test_equal(self): self.assertEqual(Expression("", "", ""), Expression("", "", "")) self.assertEqual( Expression(Child(This(), Fields("name")), "==", 4), Expression(Child(This(), Fields("name")), "==", 4), ) self.assertNotEqual(Expression("", "", ""), Expression(None, None, None))
def test_node_equals(self): assert Root() == Root() assert This() == This() assert Index(2) == Index(2) assert Len() == Len() assert Sum() == Sum() assert Avg() == Avg() assert Sorted() == Sorted() assert And(Root(), Fields("name")) == And(Root(), Fields("name")) assert Or(Root(), Fields("name")) == Or(Root(), Fields("name")) assert Child(Root(), Fields("name")) == Child(Root(), Fields("name")) assert Where(Root(), Fields("name")) == Where(Root(), Fields("name"))
def test_find(self): data = {"value": 2, "other": 3} self.assertEqual( Expression(Child(This(), Fields("value")), "==", 2).find(data), True) self.assertEqual( Expression(Child(This(), Fields("other")), "<", 6).find(data), True) self.assertEqual( Expression(Child(This(), Fields("value")), None, 2).find(data), True) self.assertEqual( Expression(Child(This(), Fields("val")), ">=", 4).find({}), False)
def test_find_with_none_expressions(self): data = {"data": 2} data_2 = [{"data": 2}, {"data": 4}] self.assertEqual(find(Filter(None), data), [data]) self.assertEqual(find(Filter([]), data), [data]) self.assertEqual(find(Filter({}), data), [data]) expr = Expression(Child(Root(), Fields("data")), "==", 2) self.assertEqual(find(Filter(expr), data_2), [{"data": 2}])
def test_repr_all_nodes(self): self.assertEqual(repr(Node(None, None)), "") self.assertEqual(repr(Child(Root(), Fields("name"))), "Child(Root(), Fields('name'))") self.assertEqual( repr(Descendants(Root(), Fields("name"))), "Descendants(Root(), Fields('name'))", ) self.assertEqual(repr(Union(Root(), Fields("name"))), "Union(Root()|Fields('name'))")
def test_str_and_repr(self): self.assertEqual(str(Expression("", "", "")), "") self.assertEqual( str(Expression(Child(This(), Fields("name")), ">", 10)), "@.name>10") self.assertEqual(repr(Expression("", "", "")), "Expression(target='',op='',value='')") self.assertEqual( repr(Expression("name", ">", 10)), "Expression(target='name',op='>',value=10)", )
def test_str_all_nodes(self): self.assertEqual(str(Node(None, None)), "") self.assertEqual(str(Child(Root(), Fields("name"))), "$.name") self.assertEqual(str(Where(Root(), Fields("name"))), "$ where name") self.assertEqual(str(Descendants(Root(), Fields("name"))), "$..name") self.assertEqual(str(Union(Root(), Fields("name"))), "$|name")
def test_find(self): data = [{"value": 2}, {"other": 3}, {"value": 1}] exp = Expression(Child(This(), Fields("value")), "<=", 2) self.assertEqual(find(Filter(exp), data), [{"value": 2}, {"value": 1}])
def test_find_with_no_list(self): expr = Expression(Child(Root(), Fields("data")), "==", 2) self.assertEqual(find(Filter(expr), {}), [])
def test_find_with_exception(self): expr = Expression(Child(Root(), Fields("data")), "==", 2) assert_with_error(self, Filter(expr), JPathNodeError)
def test_find(self): data = {"data": [{"value": 2}, {"other": 3}]} child = Child(Child(Root(), Fields("data")), AllIndex()) where = Where(child, Fields("value")) self.assertEqual(find(where, data), [{"value": 2}])
def test_find(self): child = Child(Root(), Fields("value")) self.assertEqual(find(child, {"value": 23}), [23]) self.assertEqual(find(child, dict()), []) self.assertEqual(find(child, {"other": 23}), [])
def p_child(p): """json_path : json_path '.' json_path | json_path '[' index ']'""" p[0] = Child(p[1], p[3])