blob: bea268da6e097a2f15b168d1f8a39d28b94685f5 [file] [log] [blame]
package org.codehaus.jackson.map.deser;
import java.util.List;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.type.TypeReference;
import org.codehaus.jackson.map.*;
public class TestGenericSubTyping extends BaseMapTest
{
// Types for [JACKSON-778]
static class Document {}
static class Row {}
static class RowWithDoc<D extends Document> extends Row {
@JsonProperty("d") D d;
}
static class ResultSet<R extends Row> {
@JsonProperty("rows") List<R> rows;
}
static class ResultSetWithDoc<D extends Document> extends ResultSet<RowWithDoc<D>> {}
static class MyDoc extends Document {}
/*
/*******************************************************
/* Unit tests
/*******************************************************
*/
public void testIssue778() throws Exception
{
final ObjectMapper mapper = new ObjectMapper();
String json = "{\"rows\":[{\"d\":{}}]}";
final TypeReference<?> type = new TypeReference<ResultSetWithDoc<MyDoc>>() {};
// type passed is correct, but somehow it gets mangled when passed...
ResultSetWithDoc<MyDoc> rs = mapper.readValue(json, type);
Document d = rs.rows.iterator().next().d;
assertEquals(MyDoc.class, d.getClass()); //expected MyDoc but was Document
}
}