From 675fa6dfdd5848656e8331ee723cdc8315bf30df Mon Sep 17 00:00:00 2001 From: gus Date: Sun, 30 Apr 2017 12:27:43 -0400 Subject: [PATCH] Test demonstrating Issue #15 --- .../voodoodyne/jackson/jsog/Issue15Test.java | 62 +++++++++++++++++++ .../com/voodoodyne/jackson/jsog/Thing.java | 24 +++++++ 2 files changed, 86 insertions(+) create mode 100644 src/test/java/com/voodoodyne/jackson/jsog/Issue15Test.java create mode 100644 src/test/java/com/voodoodyne/jackson/jsog/Thing.java diff --git a/src/test/java/com/voodoodyne/jackson/jsog/Issue15Test.java b/src/test/java/com/voodoodyne/jackson/jsog/Issue15Test.java new file mode 100644 index 0000000..9fba29f --- /dev/null +++ b/src/test/java/com/voodoodyne/jackson/jsog/Issue15Test.java @@ -0,0 +1,62 @@ +package com.voodoodyne.jackson.jsog; + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.testng.annotations.Test; + + +import java.io.IOException; +import java.util.Date; + +/** + * Demonstrates the inability to round trip serialize deserialize when using DefaultTyping.NON_FINAL, + * and version fixes for NON_CONCRETE strategies. + */ +public class Issue15Test { + + @Test // always works + public void testIssue5WorkaroundObject() throws IOException { + testWithPolymorphicStrategy(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT); + + } + @Test(enabled = false) // works with Jackson 2.5.4+ + public void testIssue5WorkaroundObjectAndNonConcrete() throws IOException { + testWithPolymorphicStrategy(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE); + + } + @Test(enabled = false) // works with Jackson 2.5.4+ + public void testIssue5WorkaroundNonConcreteAndArrays() throws IOException { + testWithPolymorphicStrategy(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS); + + } + @Test(enabled = false) // fails on Jackson 2.8.8 (no working version as of this date) + public void testIssue5WorkaroundNonFinal() throws IOException { + testWithPolymorphicStrategy(ObjectMapper.DefaultTyping.NON_FINAL); + } + + private void testWithPolymorphicStrategy(ObjectMapper.DefaultTyping typingStragegy) throws IOException { + Thing t = new Thing(); + t.setName("foo"); + + t.setDate(new Date()); + + ObjectMapper mapper = new ObjectMapper(); + mapper.enableDefaultTyping(typingStragegy); + + // issue is JSOG specific since removing this line causes all tests to + // pass in 2.5.4 (did not test earlier) + mapper.addMixIn(Object.class, JSOGMixin.class); + + // No difference if we use the module workaround from Issue #5 + +// SimpleModule jModule = new SimpleModule(); +// jModule.setMixInAnnotation(Object.class, JSOGMixin.class); +// mapper.registerModule(jModule); + + String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t); + mapper.readValue(json, Thing.class); + } + + @JsonIdentityInfo(generator = JSOGGenerator.class) private static class JSOGMixin {} +} diff --git a/src/test/java/com/voodoodyne/jackson/jsog/Thing.java b/src/test/java/com/voodoodyne/jackson/jsog/Thing.java new file mode 100644 index 0000000..e69c9ae --- /dev/null +++ b/src/test/java/com/voodoodyne/jackson/jsog/Thing.java @@ -0,0 +1,24 @@ +package com.voodoodyne.jackson.jsog; + +import java.util.Date; + +public class Thing { + private String name; + private Date date; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } +}