| package org.codehaus.jackson.map.jsontype; |
| |
| import java.util.*; |
| |
| import org.codehaus.jackson.annotate.*; |
| import org.codehaus.jackson.map.BaseMapTest; |
| import org.codehaus.jackson.map.ObjectMapper; |
| |
| /** |
| * Testing to verify that {@link JsonTypeInfo} works |
| * for properties as well as types (see [JACKSON-280] for details) |
| * |
| * @since 1.7 |
| */ |
| @SuppressWarnings("serial") |
| public class TestPropertyTypeInfo extends BaseMapTest |
| { |
| /* |
| /********************************************************** |
| /* Helper types |
| /********************************************************** |
| */ |
| |
| static class FieldWrapperBean |
| { |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public Object value; |
| |
| public FieldWrapperBean() { } |
| public FieldWrapperBean(Object o) { value = o; } |
| } |
| |
| static class FieldWrapperBeanList extends ArrayList<FieldWrapperBean> { } |
| static class FieldWrapperBeanMap extends HashMap<String,FieldWrapperBean> { } |
| static class FieldWrapperBeanArray { |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public FieldWrapperBean[] beans; |
| |
| public FieldWrapperBeanArray() { } |
| public FieldWrapperBeanArray(FieldWrapperBean[] beans) { this.beans = beans; } |
| } |
| |
| static class MethodWrapperBean |
| { |
| private Object value; |
| |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public Object getValue() { return value; } |
| |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public void setValue(Object v) { value = v; } |
| |
| public MethodWrapperBean() { } |
| public MethodWrapperBean(Object o) { value = o; } |
| } |
| |
| static class MethodWrapperBeanList extends ArrayList<MethodWrapperBean> { } |
| static class MethodWrapperBeanMap extends HashMap<String,MethodWrapperBean> { } |
| static class MethodWrapperBeanArray { |
| protected MethodWrapperBean[] beans; |
| |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public MethodWrapperBean[] getValue() { return beans; } |
| |
| @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.WRAPPER_ARRAY) |
| public void setValue(MethodWrapperBean[] v) { beans = v; } |
| |
| public MethodWrapperBeanArray() { } |
| public MethodWrapperBeanArray(MethodWrapperBean[] beans) { this.beans = beans; } |
| } |
| |
| static class OtherBean { |
| public int x = 1, y = 1; |
| } |
| |
| /* |
| /********************************************************** |
| /* Unit tests |
| /********************************************************** |
| */ |
| |
| public void testSimpleField() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| String json = mapper.writeValueAsString(new FieldWrapperBean(new StringWrapper("foo"))); |
| //System.out.println("JSON/field+object == "+json); |
| FieldWrapperBean bean = mapper.readValue(json, FieldWrapperBean.class); |
| assertNotNull(bean.value); |
| assertEquals(StringWrapper.class, bean.value.getClass()); |
| assertEquals(((StringWrapper) bean.value).str, "foo"); |
| } |
| |
| public void testSimpleMethod() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| String json = mapper.writeValueAsString(new FieldWrapperBean(new IntWrapper(37))); |
| //System.out.println("JSON/method+object == "+json); |
| FieldWrapperBean bean = mapper.readValue(json, FieldWrapperBean.class); |
| assertNotNull(bean.value); |
| assertEquals(IntWrapper.class, bean.value.getClass()); |
| assertEquals(((IntWrapper) bean.value).i, 37); |
| } |
| |
| public void testSimpleListField() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| FieldWrapperBeanList list = new FieldWrapperBeanList(); |
| list.add(new FieldWrapperBean(new OtherBean())); |
| String json = mapper.writeValueAsString(list); |
| //System.out.println("JSON/field+list == "+json); |
| FieldWrapperBeanList result = mapper.readValue(json, FieldWrapperBeanList.class); |
| assertNotNull(result); |
| assertEquals(1, result.size()); |
| FieldWrapperBean bean = list.get(0); |
| assertEquals(OtherBean.class, bean.value.getClass()); |
| assertEquals(((OtherBean) bean.value).x, 1); |
| assertEquals(((OtherBean) bean.value).y, 1); |
| } |
| |
| public void testSimpleListMethod() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| MethodWrapperBeanList list = new MethodWrapperBeanList(); |
| list.add(new MethodWrapperBean(new BooleanWrapper(true))); |
| list.add(new MethodWrapperBean(new StringWrapper("x"))); |
| list.add(new MethodWrapperBean(new OtherBean())); |
| String json = mapper.writeValueAsString(list); |
| MethodWrapperBeanList result = mapper.readValue(json, MethodWrapperBeanList.class); |
| assertNotNull(result); |
| assertEquals(3, result.size()); |
| MethodWrapperBean bean = result.get(0); |
| assertEquals(BooleanWrapper.class, bean.value.getClass()); |
| assertEquals(((BooleanWrapper) bean.value).b, Boolean.TRUE); |
| bean = result.get(1); |
| assertEquals(StringWrapper.class, bean.value.getClass()); |
| assertEquals(((StringWrapper) bean.value).str, "x"); |
| bean = result.get(2); |
| assertEquals(OtherBean.class, bean.value.getClass()); |
| } |
| |
| public void testSimpleArrayField() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| FieldWrapperBeanArray array = new FieldWrapperBeanArray(new |
| FieldWrapperBean[] { new FieldWrapperBean(new BooleanWrapper(true)) }); |
| String json = mapper.writeValueAsString(array); |
| FieldWrapperBeanArray result = mapper.readValue(json, FieldWrapperBeanArray.class); |
| assertNotNull(result); |
| FieldWrapperBean[] beans = result.beans; |
| assertEquals(1, beans.length); |
| FieldWrapperBean bean = beans[0]; |
| assertEquals(BooleanWrapper.class, bean.value.getClass()); |
| assertEquals(((BooleanWrapper) bean.value).b, Boolean.TRUE); |
| } |
| |
| public void testSimpleArrayMethod() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| MethodWrapperBeanArray array = new MethodWrapperBeanArray(new |
| MethodWrapperBean[] { new MethodWrapperBean(new StringWrapper("A")) }); |
| String json = mapper.writeValueAsString(array); |
| MethodWrapperBeanArray result = mapper.readValue(json, MethodWrapperBeanArray.class); |
| assertNotNull(result); |
| MethodWrapperBean[] beans = result.beans; |
| assertEquals(1, beans.length); |
| MethodWrapperBean bean = beans[0]; |
| assertEquals(StringWrapper.class, bean.value.getClass()); |
| assertEquals(((StringWrapper) bean.value).str, "A"); |
| } |
| |
| public void testSimpleMapField() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| FieldWrapperBeanMap map = new FieldWrapperBeanMap(); |
| map.put("foop", new FieldWrapperBean(new IntWrapper(13))); |
| String json = mapper.writeValueAsString(map); |
| FieldWrapperBeanMap result = mapper.readValue(json, FieldWrapperBeanMap.class); |
| assertNotNull(result); |
| assertEquals(1, result.size()); |
| FieldWrapperBean bean = result.get("foop"); |
| assertNotNull(bean); |
| Object ob = bean.value; |
| assertEquals(IntWrapper.class, ob.getClass()); |
| assertEquals(((IntWrapper) ob).i, 13); |
| } |
| |
| public void testSimpleMapMethod() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| MethodWrapperBeanMap map = new MethodWrapperBeanMap(); |
| map.put("xyz", new MethodWrapperBean(new BooleanWrapper(true))); |
| String json = mapper.writeValueAsString(map); |
| MethodWrapperBeanMap result = mapper.readValue(json, MethodWrapperBeanMap.class); |
| assertNotNull(result); |
| assertEquals(1, result.size()); |
| MethodWrapperBean bean = result.get("xyz"); |
| assertNotNull(bean); |
| Object ob = bean.value; |
| assertEquals(BooleanWrapper.class, ob.getClass()); |
| assertEquals(((BooleanWrapper) ob).b, Boolean.TRUE); |
| } |
| } |