blob: 451cab349bfbf17f47597dc3db7e731c6024d56c [file] [log] [blame]
package com.fasterxml.jackson.failing;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
/**
* Test for [databind#1035], wherein key type of a `Map` not used with `@JsonAnySetter`
* (value type is).
*/
public class AnySetter1035Test extends BaseMapTest
{
static class MyGeneric<T>
{
private String staticallyMappedProperty;
private Map<T, Integer> dynamicallyMappedProperties = new HashMap<T, Integer>();
public String getStaticallyMappedProperty() {
return staticallyMappedProperty;
}
@JsonAnySetter
public void addDynamicallyMappedProperty(T key, int value) {
dynamicallyMappedProperties.put(key, value);
}
public void setStaticallyMappedProperty(String staticallyMappedProperty) {
this.staticallyMappedProperty = staticallyMappedProperty;
}
@JsonAnyGetter
public Map<T, Integer> getDynamicallyMappedProperties() {
return dynamicallyMappedProperties;
}
}
static class MyWrapper
{
private MyGeneric<String> myStringGeneric;
private MyGeneric<Integer> myIntegerGeneric;
public MyGeneric<String> getMyStringGeneric() {
return myStringGeneric;
}
public void setMyStringGeneric(MyGeneric<String> myStringGeneric) {
this.myStringGeneric = myStringGeneric;
}
public MyGeneric<Integer> getMyIntegerGeneric() {
return myIntegerGeneric;
}
public void setMyIntegerGeneric(MyGeneric<Integer> myIntegerGeneric) {
this.myIntegerGeneric = myIntegerGeneric;
}
}
public void testGenericAnySetter() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
Map<String, Integer> stringGenericMap = new HashMap<String, Integer>();
stringGenericMap.put("testStringKey", 5);
Map<Integer, Integer> integerGenericMap = new HashMap<Integer, Integer>();
integerGenericMap.put(111, 6);
MyWrapper deserialized = mapper.readValue(aposToQuotes(
"{'myStringGeneric':{'staticallyMappedProperty':'Test','testStringKey':5},'myIntegerGeneric':{'staticallyMappedProperty':'Test2','111':6}}"
), MyWrapper.class);
MyGeneric<String> stringGeneric = deserialized.getMyStringGeneric();
MyGeneric<Integer> integerGeneric = deserialized.getMyIntegerGeneric();
assertNotNull(stringGeneric);
assertEquals(stringGeneric.getStaticallyMappedProperty(), "Test");
for(Map.Entry<String, Integer> entry : stringGeneric.getDynamicallyMappedProperties().entrySet()) {
assertTrue("A key in MyGeneric<String> is not an String.", entry.getKey() instanceof String);
assertTrue("A value in MyGeneric<Integer> is not an Integer.", entry.getValue() instanceof Integer);
}
assertEquals(stringGeneric.getDynamicallyMappedProperties(), stringGenericMap);
assertNotNull(integerGeneric);
assertEquals(integerGeneric.getStaticallyMappedProperty(), "Test2");
for(Map.Entry<Integer, Integer> entry : integerGeneric.getDynamicallyMappedProperties().entrySet()) {
Object key = entry.getKey();
assertEquals("A key in MyGeneric<Integer> is not an Integer.", Integer.class, key.getClass());
Object value = entry.getValue();
assertEquals("A value in MyGeneric<Integer> is not an Integer.", Integer.class, value.getClass());
}
assertEquals(integerGeneric.getDynamicallyMappedProperties(), integerGenericMap);
}
}