blob: f8a5d6e9a28c1cd379e0bc2d7d8f372b61bc5444 [file] [log] [blame]
package org.codehaus.jackson.map.jsontype;
import java.util.concurrent.TimeUnit;
import org.codehaus.jackson.map.BaseMapTest;
import org.codehaus.jackson.map.ObjectMapper;
public class TestDefaultForEnums
extends BaseMapTest
{
public enum TestEnum {
A, B;
}
static final class EnumHolder
{
public Object value; // "untyped"
public EnumHolder() { }
public EnumHolder(TestEnum e) { value = e; }
}
protected static class TimeUnitBean {
public TimeUnit timeUnit;
}
/*
/**********************************************************
/* Test methods
/**********************************************************
*/
public void testSimpleEnumBean() throws Exception
{
TimeUnitBean bean = new TimeUnitBean();
bean.timeUnit = TimeUnit.HOURS;
// First, without type info
ObjectMapper m = new ObjectMapper();
String json = m.writeValueAsString(bean);
TimeUnitBean result = m.readValue(json, TimeUnitBean.class);
assertEquals(TimeUnit.HOURS, result.timeUnit);
// then with type info
m = new ObjectMapper();
m.enableDefaultTyping();
json = m.writeValueAsString(bean);
result = m.readValue(json, TimeUnitBean.class);
assertEquals(TimeUnit.HOURS, result.timeUnit);
}
public void testSimpleEnumsInObjectArray() throws Exception
{
ObjectMapper m = new ObjectMapper();
m.enableDefaultTyping();
// Typing is needed for enums
String json = m.writeValueAsString(new Object[] { TestEnum.A });
assertEquals("[[\"org.codehaus.jackson.map.jsontype.TestDefaultForEnums$TestEnum\",\"A\"]]", json);
// and let's verify we get it back ok as well:
Object[] value = m.readValue(json, Object[].class);
assertEquals(1, value.length);
assertSame(TestEnum.A, value[0]);
}
public void testSimpleEnumsAsField() throws Exception
{
ObjectMapper m = new ObjectMapper();
m.enableDefaultTyping();
String json = m.writeValueAsString(new EnumHolder(TestEnum.B));
assertEquals("{\"value\":[\"org.codehaus.jackson.map.jsontype.TestDefaultForEnums$TestEnum\",\"B\"]}", json);
EnumHolder holder = m.readValue(json, EnumHolder.class);
assertSame(TestEnum.B, holder.value);
}
}