Add tests wrt #795
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 c63babc..d88e397 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 @@
@JsonDeserialize(contentConverter=LowerCaser.class)
public String[] texts;
}
-
+
+ // for [databind#795]
+
+ static class ToNumberConverter extends StdConverter<String,Number>
+ {
+ @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 @@
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 0000000..d3d3b43
--- /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<String, AbstractCustomType>{
+
+ @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<String, NonAbstractCustomType>{
+
+ @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);
+ }
+}