Skip to content

Commit 8a42895

Browse files
authored
test: Add Two Creators Test with DELEGATING and PROPERTIES creators (#4605)
1 parent a23d298 commit 8a42895

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.fasterxml.jackson.failing;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
8+
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.util.List;
12+
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
15+
// for [databind#4602]
16+
public class TwoCreators4602Test
17+
extends DatabindTestUtil
18+
{
19+
static class OuterBean4602 {
20+
private final Bean4602 bean;
21+
22+
@JsonCreator
23+
public OuterBean4602(@JsonProperty("bean") Bean4602 bean) {
24+
this.bean = bean;
25+
}
26+
27+
public Bean4602 getBean() {
28+
return bean;
29+
}
30+
}
31+
32+
static class Bean4602 {
33+
private final List<String> list;
34+
35+
private final InnerBean4602 inner;
36+
37+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
38+
public Bean4602(@JsonProperty("list") List<String> list, @JsonProperty("inner") InnerBean4602 inner) {
39+
this.list = list;
40+
this.inner = inner;
41+
}
42+
43+
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
44+
private static Bean4602 of(final List<String> list) {
45+
return new Bean4602(list, new InnerBean4602("default"));
46+
}
47+
48+
public List<String> getList() {
49+
return list;
50+
}
51+
52+
public InnerBean4602 getInner() {
53+
return inner;
54+
}
55+
}
56+
57+
static class InnerBean4602 {
58+
private final String name;
59+
60+
@JsonCreator
61+
public InnerBean4602(@JsonProperty("name") String name) {
62+
this.name = name;
63+
}
64+
65+
public String getName() {
66+
return name;
67+
}
68+
}
69+
70+
private final ObjectMapper MAPPER = newJsonMapper();
71+
72+
@Test
73+
public void testThatPropertiesCreatorIsUsed() throws Exception
74+
{
75+
final String json = "{ \"bean\":{ \"list\":[ \"a\", \"b\", \"c\"], \"inner\":{ \"name\": \"inner\" }}}";
76+
77+
OuterBean4602 result = MAPPER.readValue(json, OuterBean4602.class);
78+
79+
assertThat(result).isNotNull();
80+
assertThat(result.getBean()).isNotNull();
81+
assertThat(result.getBean().getInner()).isNotNull();
82+
assertThat(result.getBean().getInner().getName()).isEqualTo("inner");
83+
assertThat(result.getBean().getList()).containsExactly("a", "b", "c");
84+
}
85+
86+
@Test
87+
public void testThatDelegatingCreatorIsUsed() throws Exception
88+
{
89+
OuterBean4602 result = MAPPER.readValue("{ \"bean\": [ \"a\", \"b\", \"c\"] }",
90+
OuterBean4602.class);
91+
92+
assertThat(result).isNotNull();
93+
assertThat(result.getBean()).isNotNull();
94+
assertThat(result.getBean().getInner()).isNotNull();
95+
assertThat(result.getBean().getInner().getName()).isEqualTo("default");
96+
assertThat(result.getBean().getList()).containsExactly("a", "b", "c");
97+
}
98+
}

0 commit comments

Comments
 (0)