From 14f9c8ced833ffca8e422ba33c796058130a436b Mon Sep 17 00:00:00 2001 From: Ed Gomoliako Date: Mon, 1 Jul 2024 11:44:26 +0200 Subject: [PATCH 1/2] test: Add Two Creators Test with DELEGATING and PROPERTIES creators for a class at the same time for different purposes --- .../deser/creators/TwoCreatorsTest.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java new file mode 100644 index 0000000000..c21f2daa38 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java @@ -0,0 +1,113 @@ +package com.fasterxml.jackson.databind.deser.creators; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TwoCreatorsTest { + + @Test + public void testThatPropertiesCreatorIsUsed() throws JsonProcessingException { + final String json = "{ \"bean\":{ \"list\":[ \"a\", \"b\", \"c\"], \"inner\":{ \"name\": \"inner\" }}}"; + + final ObjectMapper mapper = new ObjectMapper(); + + OuterBean result = mapper.readValue(json, OuterBean.class); + + assertThat(result) + .isNotNull(); + + assertThat(result.getBean()) + .isNotNull(); + + assertThat(result.getBean().getInner()) + .isNotNull(); + + assertThat(result.getBean().getInner().getName()) + .isEqualTo("inner"); + + assertThat(result.getBean().getList()) + .containsExactly("a", "b", "c"); + } + + @Test + public void testThatDelegatingCreatorIsUsed() throws JsonProcessingException { + final String json = "{ \"bean\": [ \"a\", \"b\", \"c\"] }"; + + final ObjectMapper mapper = new ObjectMapper(); + + OuterBean result = mapper.readValue(json, OuterBean.class); + + assertThat(result) + .isNotNull(); + + assertThat(result.getBean()) + .isNotNull(); + + assertThat(result.getBean().getInner()) + .isNotNull(); + + assertThat(result.getBean().getInner().getName()) + .isEqualTo("default"); + + assertThat(result.getBean().getList()) + .containsExactly("a", "b", "c"); + } + + public static class OuterBean { + private final Bean bean; + + @JsonCreator + public OuterBean(@JsonProperty("bean") Bean bean) { + this.bean = bean; + } + + public Bean getBean() { + return bean; + } + } + + public static class Bean { + private final List list; + + private final InnerBean inner; + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + public Bean(@JsonProperty("list") List list, @JsonProperty("inner") InnerBean inner) { + this.list = list; + this.inner = inner; + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + private static Bean of(final List list) { + return new Bean(list, new InnerBean("default")); + } + + public List getList() { + return list; + } + + public InnerBean getInner() { + return inner; + } + } + + public static class InnerBean { + private final String name; + + @JsonCreator + public InnerBean(@JsonProperty("name") String name) { + this.name = name; + } + + public String getName() { + return name; + } + } +} From dd849c28ca15789a1e12e9168df4b64f87fdfd90 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 2 Jul 2024 18:14:04 -0700 Subject: [PATCH 2/2] Minor tweaking --- .../deser/creators/TwoCreatorsTest.java | 113 ------------------ .../jackson/failing/TwoCreators4602Test.java | 98 +++++++++++++++ 2 files changed, 98 insertions(+), 113 deletions(-) delete mode 100644 src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java create mode 100644 src/test/java/com/fasterxml/jackson/failing/TwoCreators4602Test.java diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java deleted file mode 100644 index c21f2daa38..0000000000 --- a/src/test/java/com/fasterxml/jackson/databind/deser/creators/TwoCreatorsTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.fasterxml.jackson.databind.deser.creators; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class TwoCreatorsTest { - - @Test - public void testThatPropertiesCreatorIsUsed() throws JsonProcessingException { - final String json = "{ \"bean\":{ \"list\":[ \"a\", \"b\", \"c\"], \"inner\":{ \"name\": \"inner\" }}}"; - - final ObjectMapper mapper = new ObjectMapper(); - - OuterBean result = mapper.readValue(json, OuterBean.class); - - assertThat(result) - .isNotNull(); - - assertThat(result.getBean()) - .isNotNull(); - - assertThat(result.getBean().getInner()) - .isNotNull(); - - assertThat(result.getBean().getInner().getName()) - .isEqualTo("inner"); - - assertThat(result.getBean().getList()) - .containsExactly("a", "b", "c"); - } - - @Test - public void testThatDelegatingCreatorIsUsed() throws JsonProcessingException { - final String json = "{ \"bean\": [ \"a\", \"b\", \"c\"] }"; - - final ObjectMapper mapper = new ObjectMapper(); - - OuterBean result = mapper.readValue(json, OuterBean.class); - - assertThat(result) - .isNotNull(); - - assertThat(result.getBean()) - .isNotNull(); - - assertThat(result.getBean().getInner()) - .isNotNull(); - - assertThat(result.getBean().getInner().getName()) - .isEqualTo("default"); - - assertThat(result.getBean().getList()) - .containsExactly("a", "b", "c"); - } - - public static class OuterBean { - private final Bean bean; - - @JsonCreator - public OuterBean(@JsonProperty("bean") Bean bean) { - this.bean = bean; - } - - public Bean getBean() { - return bean; - } - } - - public static class Bean { - private final List list; - - private final InnerBean inner; - - @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - public Bean(@JsonProperty("list") List list, @JsonProperty("inner") InnerBean inner) { - this.list = list; - this.inner = inner; - } - - @JsonCreator(mode = JsonCreator.Mode.DELEGATING) - private static Bean of(final List list) { - return new Bean(list, new InnerBean("default")); - } - - public List getList() { - return list; - } - - public InnerBean getInner() { - return inner; - } - } - - public static class InnerBean { - private final String name; - - @JsonCreator - public InnerBean(@JsonProperty("name") String name) { - this.name = name; - } - - public String getName() { - return name; - } - } -} diff --git a/src/test/java/com/fasterxml/jackson/failing/TwoCreators4602Test.java b/src/test/java/com/fasterxml/jackson/failing/TwoCreators4602Test.java new file mode 100644 index 0000000000..25e31f848b --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/failing/TwoCreators4602Test.java @@ -0,0 +1,98 @@ +package com.fasterxml.jackson.failing; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.testutil.DatabindTestUtil; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +// for [databind#4602] +public class TwoCreators4602Test + extends DatabindTestUtil +{ + static class OuterBean4602 { + private final Bean4602 bean; + + @JsonCreator + public OuterBean4602(@JsonProperty("bean") Bean4602 bean) { + this.bean = bean; + } + + public Bean4602 getBean() { + return bean; + } + } + + static class Bean4602 { + private final List list; + + private final InnerBean4602 inner; + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + public Bean4602(@JsonProperty("list") List list, @JsonProperty("inner") InnerBean4602 inner) { + this.list = list; + this.inner = inner; + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + private static Bean4602 of(final List list) { + return new Bean4602(list, new InnerBean4602("default")); + } + + public List getList() { + return list; + } + + public InnerBean4602 getInner() { + return inner; + } + } + + static class InnerBean4602 { + private final String name; + + @JsonCreator + public InnerBean4602(@JsonProperty("name") String name) { + this.name = name; + } + + public String getName() { + return name; + } + } + + private final ObjectMapper MAPPER = newJsonMapper(); + + @Test + public void testThatPropertiesCreatorIsUsed() throws Exception + { + final String json = "{ \"bean\":{ \"list\":[ \"a\", \"b\", \"c\"], \"inner\":{ \"name\": \"inner\" }}}"; + + OuterBean4602 result = MAPPER.readValue(json, OuterBean4602.class); + + assertThat(result).isNotNull(); + assertThat(result.getBean()).isNotNull(); + assertThat(result.getBean().getInner()).isNotNull(); + assertThat(result.getBean().getInner().getName()).isEqualTo("inner"); + assertThat(result.getBean().getList()).containsExactly("a", "b", "c"); + } + + @Test + public void testThatDelegatingCreatorIsUsed() throws Exception + { + OuterBean4602 result = MAPPER.readValue("{ \"bean\": [ \"a\", \"b\", \"c\"] }", + OuterBean4602.class); + + assertThat(result).isNotNull(); + assertThat(result.getBean()).isNotNull(); + assertThat(result.getBean().getInner()).isNotNull(); + assertThat(result.getBean().getInner().getName()).isEqualTo("default"); + assertThat(result.getBean().getList()).containsExactly("a", "b", "c"); + } +}