blob: 880367504db4dec4f7d7a72aab9d71aff4646087 [file] [log] [blame]
package org.codehaus.jackson.map.jsontype;
import java.util.*;
import org.codehaus.jackson.annotate.JsonTypeInfo;
import org.codehaus.jackson.map.BaseMapTest;
import org.codehaus.jackson.map.ObjectMapper;
@SuppressWarnings("serial")
public class TestEnumTyping extends BaseMapTest
{
/*
/**********************************************************
/* Helper types
/**********************************************************
*/
// note: As.WRAPPER_ARRAY worked initially; but as per [JACKSON-485], As.PROPERTY had issues
@JsonTypeInfo(use=JsonTypeInfo.Id.MINIMAL_CLASS, include=JsonTypeInfo.As.PROPERTY)
public interface EnumInterface { }
public enum Tag implements EnumInterface
{ A, B };
static class EnumInterfaceWrapper {
public EnumInterface value;
}
static class EnumInterfaceList extends ArrayList<EnumInterface> { }
static class TagList extends ArrayList<Tag> { }
static enum TestEnum { A, B, C; }
static class UntypedEnumBean
{
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="__type")
public Object value;
public UntypedEnumBean() { }
public UntypedEnumBean(TestEnum v) { value = v; }
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="__type")
public void setValue(Object o) {
value = o;
}
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
public void testTagList() throws Exception
{
ObjectMapper m = new ObjectMapper();
TagList list = new TagList();
list.add(Tag.A);
list.add(Tag.B);
String json = m.writeValueAsString(list);
TagList result = m.readValue(json, TagList.class);
assertEquals(2, result.size());
assertSame(Tag.A, result.get(0));
assertSame(Tag.B, result.get(1));
}
public void testEnumInterface() throws Exception
{
ObjectMapper m = new ObjectMapper();
String json = m.writeValueAsString(Tag.B);
EnumInterface result = m.readValue(json, EnumInterface.class);
assertSame(Tag.B, result);
}
public void testEnumInterfaceList() throws Exception
{
ObjectMapper m = new ObjectMapper();
EnumInterfaceList list = new EnumInterfaceList();
list.add(Tag.A);
list.add(Tag.B);
String json = m.writeValueAsString(list);
EnumInterfaceList result = m.readValue(json, EnumInterfaceList.class);
assertEquals(2, result.size());
assertSame(Tag.A, result.get(0));
assertSame(Tag.B, result.get(1));
}
public void testUntypedEnum() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(new UntypedEnumBean(TestEnum.B));
UntypedEnumBean result = mapper.readValue(str, UntypedEnumBean.class);
assertNotNull(result);
assertNotNull(result.value);
Object ob = result.value;
assertSame(TestEnum.class, ob.getClass());
assertEquals(TestEnum.B, result.value);
}
}