JsonPath仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
8.3 KiB

package com.jayway.jsonpath;
import com.jayway.jsonpath.internal.filter.eval.ExpressionEvaluator;
import org.codehaus.jackson.node.BigIntegerNode;
import org.junit.Ignore;
import org.junit.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* Created by IntelliJ IDEA.
* User: kallestenflo
* Date: 2/4/11
* Time: 9:32 PM
*/
public class ExpressionEvalTest {
public static final String DOCUMENT= "{\n" +
" \"characters\": [\n" +
" {\n" +
" \"aliases\": [], \n" +
" \"name\": \"Kleeg Lars\", \n" +
" \"occupation\": \"Moisture farmer\", \n" +
" \"offspring\": []\n" +
" }, \n" +
" {\n" +
" \"aliases\": [], \n" +
" \"name\": \"Shmi Skywalker\", \n" +
" \"occupation\": \"Virgin mother\", \n" +
" \"offspring\": [\n" +
" \"AnakinSkywalker\"\n" +
" ]\n" +
" }, \n" +
" {\n" +
" \"aliases\": [\n" +
" \"Darth Vader\"\n" +
" ], \n" +
" \"name\": \"Annakin Skywalker\", \n" +
" \"occupation\": \"Hand of the Emperor, Lord of the Sith\", \n" +
" \"offspring\": [\n" +
" \"Luke Skywalker\", \n" +
" \"LeiaOrgana\"\n" +
" ]\n" +
" }, \n" +
" {\n" +
" \"aliases\": [\n" +
" \"Nerf herder\"\n" +
" ], \n" +
" \"name\": \"Luke Skywalker\", \n" +
" \"occupation\": \"Farm boy\", \n" +
" \"offspring\": null\n" +
" }, \n" +
" {\n" +
" \"aliases\": [\n" +
" \"Your Highness\"\n" +
" ], \n" +
" \"name\": \"Leia Organa\", \n" +
" \"occupation\": \"Senator\", \n" +
" }\n" +
" ]\n" +
"}\n";
@Test
public void long_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(1L, "==", "1"));
assertTrue(ExpressionEvaluator.eval(2L, "!=", "1"));
assertTrue(ExpressionEvaluator.eval(2L, ">", "1"));
assertTrue(ExpressionEvaluator.eval(2L, ">=", "1"));
assertTrue(ExpressionEvaluator.eval(2L, ">=", "2"));
assertTrue(ExpressionEvaluator.eval(1L, "<", "2"));
assertTrue(ExpressionEvaluator.eval(2L, "<=", "2"));
assertFalse(ExpressionEvaluator.eval(1, ">", "2"));
assertFalse(ExpressionEvaluator.eval(1, ">=", "2"));
assertFalse(ExpressionEvaluator.eval(2, "<", "1"));
assertFalse(ExpressionEvaluator.eval(2, "<=", "1"));
assertFalse(ExpressionEvaluator.eval(1, "==", "2"));
assertFalse(ExpressionEvaluator.eval(1, "!=", "1"));
}
@Test
public void bigint_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(new BigInteger("1"), "==", "1"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("2"), "!=", "1"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("2"), ">", "1"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("2"), ">=", "1"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("2"), ">=", "2"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("1"), "<", "2"));
assertTrue(ExpressionEvaluator.eval(new BigInteger("2"), "<=", "2"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("1"), ">", "2"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("1"), ">=", "2"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("2"), "<", "1"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("2"), "<=", "1"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("1"), "==", "2"));
assertFalse(ExpressionEvaluator.eval(new BigInteger("1"), "!=", "1"));
}
@Test
public void bigdec_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(new BigDecimal("1.1"), "==", "1.1"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("2"), "!=", "1"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("2"), ">", "1"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("2"), ">=", "1"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("2"), ">=", "2"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("1"), "<", "2"));
assertTrue(ExpressionEvaluator.eval(new BigDecimal("2"), "<=", "2"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("1"), ">", "2"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("1"), ">=", "2"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("2"), "<", "1"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("2"), "<=", "1"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("1"), "==", "2"));
assertFalse(ExpressionEvaluator.eval(new BigDecimal("1"), "!=", "1"));
}
@Test
public void double_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(1D, "==", "1"));
assertTrue(ExpressionEvaluator.eval(2D, "!=", "1"));
assertTrue(ExpressionEvaluator.eval(2D, ">", "1"));
assertTrue(ExpressionEvaluator.eval(2D, ">=", "1"));
assertTrue(ExpressionEvaluator.eval(2D, ">=", "2"));
assertTrue(ExpressionEvaluator.eval(1D, "<", "2"));
assertTrue(ExpressionEvaluator.eval(2D, "<=", "2"));
assertFalse(ExpressionEvaluator.eval(1D, ">", "2"));
assertFalse(ExpressionEvaluator.eval(1D, ">=", "2"));
assertFalse(ExpressionEvaluator.eval(2D, "<", "1"));
assertFalse(ExpressionEvaluator.eval(2D, "<=", "1"));
assertFalse(ExpressionEvaluator.eval(1D, "==", "2"));
assertFalse(ExpressionEvaluator.eval(1D, "!=", "1"));
}
@Test
public void string_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval("A", "==", "A"));
assertTrue(ExpressionEvaluator.eval("B", "!=", "A"));
}
@Test
public void boolean_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(true, "==", "true"));
assertTrue(ExpressionEvaluator.eval(false, "==", "false"));
assertTrue(ExpressionEvaluator.eval(true, "!=", "false"));
assertTrue(ExpressionEvaluator.eval(true, "<>", "false"));
assertTrue(ExpressionEvaluator.eval(false, "!=", "true"));
assertTrue(ExpressionEvaluator.eval(false, "<>", "true"));
assertFalse(ExpressionEvaluator.eval(true, "==", "false"));
assertFalse(ExpressionEvaluator.eval(false, "==", "true"));
assertFalse(ExpressionEvaluator.eval(true, "!=", "true"));
assertFalse(ExpressionEvaluator.eval(true, "<>", "true"));
assertFalse(ExpressionEvaluator.eval(false, "<>", "false"));
assertFalse(ExpressionEvaluator.eval(false, "!=", "false"));
}
@Test
public void null_eval() throws Exception {
assertTrue(ExpressionEvaluator.eval(new Integer(10), "!=", "null"));
assertTrue(ExpressionEvaluator.eval(null, "==", "null"));
assertTrue(ExpressionEvaluator.eval(null, "<>", "FOO"));
assertTrue(ExpressionEvaluator.eval("FOO", "<>", "null"));
assertTrue(ExpressionEvaluator.eval(null, "!=", "FOO"));
assertTrue(ExpressionEvaluator.eval("FOO", "<>", "null"));
assertTrue(ExpressionEvaluator.eval(null, "!=", "10"));
}
@Test
@Ignore //TODO: finalize behaviour
public void nulls_filter() {
List<Map<String, Object>> result = JsonPath.read(DOCUMENT, "$.characters[?(@.offspring == null)]");
assertEquals(1, result.size());
result = JsonPath.read(DOCUMENT, "$.characters[?(@.offspring != null)]");
assertEquals(3, result.size());
result = JsonPath.read(DOCUMENT, "$.characters[?(@.offspring)]");
assertEquals(4, result.size());
}
}