From eaca9764e5436405e5f3af58f36ce5d4885c36cd Mon Sep 17 00:00:00 2001 From: "Durga, V H V Sekhar" Date: Fri, 24 Nov 2023 10:35:51 +0530 Subject: [PATCH] Added unit test for Issue-4214 --- .../failing/EnumSetSerialization4214Test.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/failing/EnumSetSerialization4214Test.java diff --git a/src/test/java/com/fasterxml/jackson/failing/EnumSetSerialization4214Test.java b/src/test/java/com/fasterxml/jackson/failing/EnumSetSerialization4214Test.java new file mode 100644 index 0000000000..b93a9153a6 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/failing/EnumSetSerialization4214Test.java @@ -0,0 +1,68 @@ +package com.fasterxml.jackson.failing; + +import com.fasterxml.jackson.databind.BaseMapTest; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.EnumSet; +import java.util.Set; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; + +public class EnumSetSerialization4214Test extends BaseMapTest { + + static enum MyEnum { + ITEM_A, ITEM_B; + } + + static class EnumSetHolder { + private Set enumSet; // use Set instead of EnumSet for type of this + + public Set getEnumSet() { + return enumSet; + } + + public void setEnumSet(Set enumSet) { + this.enumSet = enumSet; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof EnumSetHolder)) { + return false; + } + EnumSetHolder eh = (EnumSetHolder) o; + if (eh == this) { + return true; + } + if (enumSet == null) { + if (eh.getEnumSet() == null) { + return true; + } else { + return false; + } + } else { + if (eh.getEnumSet() == null) { + return false; + } + return enumSet.containsAll(eh.getEnumSet()); + } + } + } + + public void testSerialization() throws Exception { + ObjectMapper mapper = jsonMapperBuilder().build() + // this type information is needed in json string, for this test + .activateDefaultTyping(BasicPolymorphicTypeValidator.builder().allowIfBaseType(Object.class).build(), + DefaultTyping.EVERYTHING); + + EnumSetHolder enumSetHolder = new EnumSetHolder(); + enumSetHolder.setEnumSet(EnumSet.allOf(MyEnum.class)); + String jsonStr = mapper.writeValueAsString(enumSetHolder); + EnumSetHolder result = mapper.readValue(jsonStr, EnumSetHolder.class); + assertEquals(result, enumSetHolder); + } +}