From e412926e224b5308303e7618da45c95f59b2d91c Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sun, 17 May 2015 21:05:47 -0700 Subject: [PATCH] Add tests wrt #795 --- .../convert/TestConvertingDeserializer.java | 30 ++++++- .../ConvertingAbstractSerializer795Test.java | 83 +++++++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/fasterxml/jackson/failing/ConvertingAbstractSerializer795Test.java diff --git a/src/test/java/com/fasterxml/jackson/databind/convert/TestConvertingDeserializer.java b/src/test/java/com/fasterxml/jackson/databind/convert/TestConvertingDeserializer.java index c63babcf84..d88e39710e 100644 --- a/src/test/java/com/fasterxml/jackson/databind/convert/TestConvertingDeserializer.java +++ b/src/test/java/com/fasterxml/jackson/databind/convert/TestConvertingDeserializer.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.databind.convert; +import java.math.BigDecimal; import java.util.*; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -97,7 +98,23 @@ static class LowerCaseTextArray { @JsonDeserialize(contentConverter=LowerCaser.class) public String[] texts; } - + + // for [databind#795] + + static class ToNumberConverter extends StdConverter + { + @Override + public Number convert(String value) { + return new BigDecimal(value); + } + } + + static class Issue795Bean + { + @JsonDeserialize(converter=ToNumberConverter.class) + public Number value; + } + /* /********************************************************** /* Test methods @@ -180,4 +197,15 @@ public void testPropertyAnnotationForMaps() throws Exception assertEquals(1, p.x); assertEquals(2, p.y); } + + // [databind#795] + public void testConvertToAbstract() throws Exception + { + Issue795Bean bean = objectReader(Issue795Bean.class) + .readValue("{\"value\":\"1.25\"}"); + assertNotNull(bean.value); + assertTrue("Type not BigDecimal but "+bean.value.getClass(), + bean.value instanceof BigDecimal); + assertEquals(new BigDecimal("1.25"), bean.value); + } } diff --git a/src/test/java/com/fasterxml/jackson/failing/ConvertingAbstractSerializer795Test.java b/src/test/java/com/fasterxml/jackson/failing/ConvertingAbstractSerializer795Test.java new file mode 100644 index 0000000000..d3d3b43182 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/failing/ConvertingAbstractSerializer795Test.java @@ -0,0 +1,83 @@ +package com.fasterxml.jackson.failing; + +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.annotation.*; +import com.fasterxml.jackson.databind.util.StdConverter; + +// for [databind#795] +public class ConvertingAbstractSerializer795Test extends BaseMapTest +{ + public static abstract class AbstractCustomType { + final String value; + public AbstractCustomType(String v) { + this.value = v; + } + } + + public static class ConcreteCustomType extends AbstractCustomType { + public ConcreteCustomType(String v) { + super(v); + } + } + + public static class AbstractCustomTypeDeserializationConverter extends StdConverter{ + + @Override + public AbstractCustomType convert(String arg) { + return new ConcreteCustomType(arg); + } + } + + public static class AbstractCustomTypeUser { + @JsonProperty + @JsonDeserialize(converter = AbstractCustomTypeDeserializationConverter.class) + private final AbstractCustomType customField; + + @JsonCreator AbstractCustomTypeUser(@JsonProperty("customField") + AbstractCustomType customField) { + this.customField = customField; + } + } + + public static class NonAbstractCustomType { + final String value; + public NonAbstractCustomType(String v) { + this.value = v; + } + } + + + public static class NonAbstractCustomTypeDeserializationConverter extends StdConverter{ + + @Override + public NonAbstractCustomType convert(String arg) { + return new NonAbstractCustomType(arg); + } + } + + + public static class NonAbstractCustomTypeUser { + @JsonProperty + @JsonDeserialize(converter = NonAbstractCustomTypeDeserializationConverter.class) + private final NonAbstractCustomType customField; + + @JsonCreator NonAbstractCustomTypeUser(@JsonProperty("customField") NonAbstractCustomType customField) { + this.customField = customField; + } + } + + private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); + + public void testAbstractTypeDeserialization() throws Exception { + String test="{\"customField\": \"customString\"}"; + AbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, AbstractCustomTypeUser.class); + assertNotNull(cu); + } + + public void testNonAbstractDeserialization() throws Exception { + String test="{\"customField\": \"customString\"}"; + NonAbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, NonAbstractCustomTypeUser.class); + assertNotNull(cu); + } +}