package com.fasterxml.jackson.databind.util; import java.util.List; import com.fasterxml.jackson.databind.BaseMapTest; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.SerializationFeature; public class EnumValuesTest extends BaseMapTest { enum ABC { A("A"), B("b"), C("C"); private final String desc; private ABC(String d) { desc = d; } @Override public String toString() { return desc; } } final ObjectMapper MAPPER = new ObjectMapper(); @SuppressWarnings("unchecked") public void testConstructFromName() { SerializationConfig cfg = MAPPER.getSerializationConfig() .without(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); Class<Enum<?>> enumClass = (Class<Enum<?>>)(Class<?>) ABC.class; EnumValues values = EnumValues.construct(cfg, enumClass); assertEquals("A", values.serializedValueFor(ABC.A).toString()); assertEquals("B", values.serializedValueFor(ABC.B).toString()); assertEquals("C", values.serializedValueFor(ABC.C).toString()); assertEquals(3, values.values().size()); assertEquals(3, values.internalMap().size()); } @SuppressWarnings("unchecked") public void testConstructWithToString() { SerializationConfig cfg = MAPPER.getSerializationConfig() .with(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); Class<Enum<?>> enumClass = (Class<Enum<?>>)(Class<?>) ABC.class; EnumValues values = EnumValues.construct(cfg, enumClass); assertEquals("A", values.serializedValueFor(ABC.A).toString()); assertEquals("b", values.serializedValueFor(ABC.B).toString()); assertEquals("C", values.serializedValueFor(ABC.C).toString()); assertEquals(3, values.values().size()); assertEquals(3, values.internalMap().size()); } public void testEnumResolver() { EnumResolver enumRes = EnumResolver.constructUnsafeUsingToString(ABC.class, null); assertEquals(ABC.B, enumRes.getEnum(1)); assertNull(enumRes.getEnum(-1)); assertNull(enumRes.getEnum(3)); assertEquals(2, enumRes.lastValidIndex()); List<Enum<?>> enums = enumRes.getEnums(); assertEquals(3, enums.size()); assertEquals(ABC.A, enums.get(0)); assertEquals(ABC.B, enums.get(1)); assertEquals(ABC.C, enums.get(2)); } }