EnumTyping4733Test.java
package com.fasterxml.jackson.databind.jsontype.jdk;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class EnumTyping4733Test extends DatabindTestUtil
{
// Baseline case that already worked
@JsonTypeInfo(use = Id.CLASS)
@JsonSubTypes({
@JsonSubTypes.Type(value = A_CLASS.class),
})
interface InterClass {
default void yes() {}
}
enum A_CLASS implements InterClass {
A1,
A2 {
@Override
public void yes() { }
};
}
// Failed before fix for [databind#4733]
@JsonTypeInfo(use = Id.MINIMAL_CLASS)
@JsonSubTypes({
@JsonSubTypes.Type(value = A_MIN_CLASS.class),
})
interface InterMinimalClass {
default void yes() {}
}
enum A_MIN_CLASS implements InterMinimalClass {
A1,
A2 {
@Override
public void yes() { }
};
}
// Failed before fix for [databind#4733]
@JsonTypeInfo(use = Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = A_NAME.class),
})
interface InterName {
default void yes() {}
}
enum A_NAME implements InterName {
A1,
A2 {
@Override
public void yes() { }
};
}
// Failed before fix for [databind#4733]
@JsonTypeInfo(use = Id.SIMPLE_NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = A_SIMPLE_NAME.class),
})
interface InterSimpleName {
default void yes() {}
}
enum A_SIMPLE_NAME implements InterSimpleName {
A1,
A2 {
@Override
public void yes() { }
};
}
private final ObjectMapper MAPPER = newJsonMapper();
@Test
public void testIssue4733Class() throws Exception
{
String json1 = MAPPER.writeValueAsString(A_CLASS.A1);
String json2 = MAPPER.writeValueAsString(A_CLASS.A2);
assertEquals(A_CLASS.A1, MAPPER.readValue(json1, A_CLASS.class));
assertEquals(A_CLASS.A2, MAPPER.readValue(json2, A_CLASS.class));
}
@Test
public void testIssue4733MinimalClass() throws Exception
{
String json1 = MAPPER.writeValueAsString(A_MIN_CLASS.A1);
String json2 = MAPPER.writeValueAsString(A_MIN_CLASS.A2);
assertEquals(A_MIN_CLASS.A1, MAPPER.readValue(json1, A_MIN_CLASS.class),
"JSON: "+json1);
assertEquals(A_MIN_CLASS.A2, MAPPER.readValue(json2, A_MIN_CLASS.class),
"JSON: "+json2);
}
@Test
public void testIssue4733Name() throws Exception
{
String json1 = MAPPER.writeValueAsString(A_NAME.A1);
String json2 = MAPPER.writeValueAsString(A_NAME.A2);
assertEquals(A_NAME.A1, MAPPER.readValue(json1, A_NAME.class),
"JSON: "+json1);
assertEquals(A_NAME.A2, MAPPER.readValue(json2, A_NAME.class),
"JSON: "+json2);
}
@Test
public void testIssue4733SimpleName() throws Exception
{
String json1 = MAPPER.writeValueAsString(A_SIMPLE_NAME.A1);
String json2 = MAPPER.writeValueAsString(A_SIMPLE_NAME.A2);
assertEquals(A_SIMPLE_NAME.A1, MAPPER.readValue(json1, A_SIMPLE_NAME.class),
"JSON: "+json1);
assertEquals(A_SIMPLE_NAME.A2, MAPPER.readValue(json2, A_SIMPLE_NAME.class),
"JSON: "+json2);
}
}