From 60f77a953c92af2fb99dd82f440a520682fbcb29 Mon Sep 17 00:00:00 2001 From: Alanscut Date: Sat, 11 Jan 2020 15:26:28 +0800 Subject: [PATCH] add bigdecimal/biginteger test case for jackson --- .../JacksonJsonNodeJsonProviderTest.java | 70 ++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java b/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java index 25c80960..ec9b1810 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java @@ -2,6 +2,7 @@ package com.jayway.jsonpath; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @@ -14,6 +15,8 @@ import com.jayway.jsonpath.spi.mapper.MappingException; import org.junit.Test; import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.List; import java.util.UUID; @@ -90,7 +93,6 @@ public class JacksonJsonNodeJsonProviderTest extends BaseTest { assertThat(unwrapped).isEqualTo(node.asLong()); } - @Test public void list_of_numbers() { ArrayNode objs = using(JACKSON_JSON_NODE_CONFIGURATION).parse(JSON_DOCUMENT).read("$.store.book[*].display-price"); @@ -101,6 +103,72 @@ public class JacksonJsonNodeJsonProviderTest extends BaseTest { assertThat(objs.get(3).asDouble()).isEqualTo(22.99D); } + ObjectMapper objectMapperDecimal = new ObjectMapper().configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true); + Configuration JACKSON_JSON_NODE_CONFIGURATION_DECIMAL = Configuration + .builder() + .mappingProvider(new JacksonMappingProvider()) + .jsonProvider(new JacksonJsonNodeJsonProvider(objectMapperDecimal)) + .build(); + + @Test + public void bigdecimals_are_unwrapped() { + final BigDecimal bd = BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(10.5)); + final String json = "{\"bd-property\" : " + bd.toString() + "}"; + + JsonNode node = using(JACKSON_JSON_NODE_CONFIGURATION_DECIMAL).parse(json).read("$.bd-property"); + BigDecimal val = using(JACKSON_JSON_NODE_CONFIGURATION_DECIMAL).parse(json).read("$.bd-property", BigDecimal.class); + + assertThat(node.isBigDecimal()).isTrue(); + assertThat(val).isEqualTo(bd); + assertThat(val).isEqualTo(node.decimalValue()); + } + + @Test + public void small_bigdecimals_are_unwrapped() { + final BigDecimal bd = BigDecimal.valueOf(10.5); + final String json = "{\"bd-property\" : " + bd.toString() + "}"; + + JsonNode node = using(JACKSON_JSON_NODE_CONFIGURATION_DECIMAL).parse(json).read("$.bd-property"); + BigDecimal val = using(JACKSON_JSON_NODE_CONFIGURATION_DECIMAL).parse(json).read("$.bd-property", BigDecimal.class); + + assertThat(node.isBigDecimal()).isTrue(); + assertThat(val).isEqualTo(bd); + assertThat(val).isEqualTo(node.decimalValue()); + } + + ObjectMapper objectMapperBigInteger = new ObjectMapper().configure(DeserializationFeature.USE_BIG_INTEGER_FOR_INTS, true); + Configuration JACKSON_JSON_NODE_CONFIGURATION_Big_Integer = Configuration + .builder() + .mappingProvider(new JacksonMappingProvider()) + .jsonProvider(new JacksonJsonNodeJsonProvider(objectMapperBigInteger)) + .build(); + + @Test + public void bigintegers_are_unwrapped() { + final BigInteger bi = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.TEN); + final String json = "{\"bi-property\" : " + bi.toString() + "}"; + + JsonNode node = using(JACKSON_JSON_NODE_CONFIGURATION_Big_Integer).parse(json).read("$.bi-property"); + BigInteger val = using(JACKSON_JSON_NODE_CONFIGURATION_Big_Integer).parse(json).read("$.bi-property", BigInteger.class); + + assertThat(node.isBigInteger()).isTrue(); + assertThat(val).isEqualTo(bi); + assertThat(val).isEqualTo(node.bigIntegerValue()); + } + + @Test + public void small_bigintegers_are_unwrapped() { + final BigInteger bi = BigInteger.valueOf(Long.MAX_VALUE); + final String json = "{\"bi-property\" : " + bi.toString() + "}"; + + JsonNode node = using(JACKSON_JSON_NODE_CONFIGURATION_Big_Integer).parse(json).read("$.bi-property"); + BigInteger val = using(JACKSON_JSON_NODE_CONFIGURATION_Big_Integer).parse(json).read("$.bi-property", BigInteger.class); + + assertThat(node.isBigInteger()).isTrue(); + assertThat(val).isEqualTo(bi); + assertThat(val).isEqualTo(node.bigIntegerValue()); + } + @Test public void test_type_ref() throws IOException { TypeRef>> typeRef = new TypeRef>>() {};