def p_expression(p): """expression : json_path | json_path FILTER_OP jp_object""" if len(p) == 2: p[0] = Expression(p[1]) else: p[0] = Expression(p[1], p[2], p[3])
def test_filter_str_and_repr(self): self.assertEqual(str(Filter("")), "[?()]") self.assertEqual(str(Filter([])), "[?([])]") self.assertEqual(str(Filter(Expression())), "[?()]") self.assertEqual(repr(Filter([])), "Filter([])") self.assertEqual(repr(Filter(Expression())), "Filter(Expression(target='',op='',value=''))")
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_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_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_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)