diff --git a/json-path/src/test/java/com/jayway/jsonpath/ProviderInTest.java b/json-path/src/test/java/com/jayway/jsonpath/ProviderInTest.java new file mode 100644 index 00000000..0508539c --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/ProviderInTest.java @@ -0,0 +1,128 @@ +package com.jayway.jsonpath; + +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.google.gson.JsonArray; +import com.jayway.jsonpath.spi.json.GsonJsonProvider; +import com.jayway.jsonpath.spi.json.JacksonJsonNodeJsonProvider; +import com.jayway.jsonpath.spi.json.JacksonJsonProvider; +import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider; +import com.jayway.jsonpath.spi.json.JsonSmartJsonProvider; +import com.jayway.jsonpath.spi.mapper.GsonMappingProvider; +import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; +import com.jayway.jsonpath.spi.mapper.JsonOrgMappingProvider; +import com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider; +import org.assertj.core.util.Lists; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class ProviderInTest { + private final String JSON = "[{\"foo\": \"bar\"}, {\"foo\": \"baz\"}]"; + private final String EQUALS_FILTER = "$.[?(@.foo == %s)].foo"; + private final String IN_FILTER = "$.[?(@.foo in [%s])].foo"; + private final String DOUBLE_QUOTES = "\"bar\""; + private final String DOUBLE_QUOTES_EQUALS_FILTER = String.format(EQUALS_FILTER, DOUBLE_QUOTES); + private final String DOUBLE_QUOTES_IN_FILTER = String.format(IN_FILTER, DOUBLE_QUOTES); + private final String SINGLE_QUOTES = "'bar'"; + private final String SINGLE_QUOTES_EQUALS_FILTER = String.format(EQUALS_FILTER, SINGLE_QUOTES); + private final String SINGLE_QUOTES_IN_FILTER = String.format(IN_FILTER, SINGLE_QUOTES); + + + @Rule + public final ExpectedException exception = ExpectedException.none(); + + @Test + public void testJsonPathQuotesJackson() throws Exception { + final Configuration jackson = Configuration.builder().jsonProvider(new JacksonJsonProvider()).mappingProvider(new JacksonMappingProvider()).build(); + final DocumentContext ctx = JsonPath.using(jackson).parse(JSON); + + final List doubleQuoteEqualsResult = ctx.read(DOUBLE_QUOTES_EQUALS_FILTER); + assertEquals(Lists.newArrayList("bar"), doubleQuoteEqualsResult); + + final List singleQuoteEqualsResult = ctx.read(SINGLE_QUOTES_EQUALS_FILTER); + assertEquals(doubleQuoteEqualsResult, singleQuoteEqualsResult); + + final List doubleQuoteInResult = ctx.read(DOUBLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, doubleQuoteEqualsResult); + + exception.expect(InvalidJsonException.class); + ctx.read(SINGLE_QUOTES_IN_FILTER); + } + + + @Test + public void testJsonPathQuotesJacksonJsonNode() throws Exception { + final Configuration jacksonJsonNode = Configuration.builder().jsonProvider(new JacksonJsonNodeJsonProvider()).mappingProvider(new JacksonMappingProvider()).build(); + final DocumentContext ctx = JsonPath.using(jacksonJsonNode).parse(JSON); + + final ArrayNode doubleQuoteEqualsResult = ctx.read(DOUBLE_QUOTES_EQUALS_FILTER); + assertEquals("bar", doubleQuoteEqualsResult.get(0).asText()); + + final ArrayNode singleQuoteEqualsResult = ctx.read(SINGLE_QUOTES_EQUALS_FILTER); + assertEquals(doubleQuoteEqualsResult, singleQuoteEqualsResult); + + final ArrayNode doubleQuoteInResult = ctx.read(DOUBLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, doubleQuoteEqualsResult); + + exception.expect(InvalidJsonException.class); + ctx.read(SINGLE_QUOTES_IN_FILTER); + } + + @Test + public void testJsonPathQuotesGson() throws Exception { + final Configuration gson = Configuration.builder().jsonProvider(new GsonJsonProvider()).mappingProvider(new GsonMappingProvider()).build(); + final DocumentContext ctx = JsonPath.using(gson).parse(JSON); + + final JsonArray doubleQuoteEqualsResult = ctx.read(DOUBLE_QUOTES_EQUALS_FILTER); + assertEquals("bar", doubleQuoteEqualsResult.get(0).getAsString()); + + final JsonArray singleQuoteEqualsResult = ctx.read(SINGLE_QUOTES_EQUALS_FILTER); + assertEquals(doubleQuoteEqualsResult, singleQuoteEqualsResult); + + final JsonArray doubleQuoteInResult = ctx.read(DOUBLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, doubleQuoteEqualsResult); + + final JsonArray singleQuoteInResult = ctx.read(SINGLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, singleQuoteInResult); + } + + @Test + public void testJsonPathQuotesJsonOrg() throws Exception { + final Configuration jsonOrg = Configuration.builder().jsonProvider(new JsonOrgJsonProvider()).mappingProvider(new JsonOrgMappingProvider()).build(); + final DocumentContext ctx = JsonPath.using(jsonOrg).parse(JSON); + + final org.json.JSONArray doubleQuoteEqualsResult = ctx.read(DOUBLE_QUOTES_EQUALS_FILTER); + assertEquals("bar", doubleQuoteEqualsResult.get(0)); + + final org.json.JSONArray singleQuoteEqualsResult = ctx.read(SINGLE_QUOTES_EQUALS_FILTER); + assertEquals(doubleQuoteEqualsResult.get(0), singleQuoteEqualsResult.get(0)); + + final org.json.JSONArray doubleQuoteInResult = ctx.read(DOUBLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult.get(0), doubleQuoteEqualsResult.get(0)); + + final org.json.JSONArray singleQuoteInResult = ctx.read(SINGLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult.get(0), singleQuoteInResult.get(0)); + } + + @Test + public void testJsonPathQuotesJsonSmart() throws Exception { + final Configuration jsonSmart = Configuration.builder().jsonProvider(new JsonSmartJsonProvider()).mappingProvider(new JsonSmartMappingProvider()).build(); + final DocumentContext ctx = JsonPath.using(jsonSmart).parse(JSON); + + final net.minidev.json.JSONArray doubleQuoteEqualsResult = ctx.read(DOUBLE_QUOTES_EQUALS_FILTER); + assertEquals("bar", doubleQuoteEqualsResult.get(0)); + + final net.minidev.json.JSONArray singleQuoteEqualsResult = ctx.read(SINGLE_QUOTES_EQUALS_FILTER); + assertEquals(doubleQuoteEqualsResult, singleQuoteEqualsResult); + + final net.minidev.json.JSONArray doubleQuoteInResult = ctx.read(DOUBLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, doubleQuoteEqualsResult); + + final net.minidev.json.JSONArray singleQuoteInResult = ctx.read(SINGLE_QUOTES_IN_FILTER); + assertEquals(doubleQuoteInResult, singleQuoteInResult); + } +} \ No newline at end of file