EnumSetPolymorphicDeser4214Test.java
package com.fasterxml.jackson.databind.deser.enums;
import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.jsonMapperBuilder;
// For [databind#4214]
public class EnumSetPolymorphicDeser4214Test
{
static enum MyEnum {
ITEM_A, ITEM_B;
}
static class EnumSetHolder {
public Set<MyEnum> enumSet; // use Set instead of EnumSet for type of this
@Override
public boolean equals(Object o) {
if (!(o instanceof EnumSetHolder)) {
return false;
}
EnumSetHolder eh = (EnumSetHolder) o;
return Objects.equals(enumSet, eh.enumSet);
}
}
@Test
public void testPolymorphicDeserialization4214() throws Exception
{
// Need to use Default Typing to trigger issue
ObjectMapper mapper = jsonMapperBuilder()
.activateDefaultTyping(BasicPolymorphicTypeValidator.builder()
.allowIfBaseType(Object.class).build(),
DefaultTyping.NON_FINAL_AND_ENUMS)
.build();
EnumSetHolder enumSetHolder = new EnumSetHolder();
enumSetHolder.enumSet = EnumSet.allOf(MyEnum.class);
String json = mapper.writeValueAsString(enumSetHolder);
EnumSetHolder result = mapper.readValue(json, EnumSetHolder.class);
assertEquals(result, enumSetHolder);
assertTrue(result.enumSet instanceof EnumSet<?>);
}
}