Skip to content

Commit 5409360

Browse files
committed
Merge branch '3.0' into 3.x
2 parents f5175c6 + ab95b52 commit 5409360

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package tools.jackson.databind.format;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import com.fasterxml.jackson.annotation.JsonFormat;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
8+
import tools.jackson.databind.ObjectMapper;
9+
import tools.jackson.databind.exc.InvalidFormatException;
10+
import tools.jackson.databind.exc.MismatchedInputException;
11+
import tools.jackson.databind.json.JsonMapper;
12+
import tools.jackson.databind.testutil.DatabindTestUtil;
13+
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
import static org.junit.jupiter.api.Assertions.assertThrows;
16+
17+
// [databind#3580] Enum (de)serialization in conjunction with JsonFormat.Shape.NUMBER_INT
18+
public class EnumNumberFormatShape3580PojoTest
19+
extends DatabindTestUtil
20+
{
21+
public static class Pojo3580 {
22+
public PojoStateInt3580 state;
23+
public Pojo3580() {}
24+
public Pojo3580(PojoStateInt3580 state) {this.state = state;}
25+
}
26+
27+
@JsonFormat(shape = JsonFormat.Shape.NUMBER_INT)
28+
public enum PojoStateInt3580 {
29+
OFF(17),
30+
ON(31),
31+
UNKNOWN(99);
32+
33+
private int value;
34+
35+
PojoStateInt3580(int value) { this.value = value; }
36+
37+
@JsonValue
38+
public int value() {return this.value;}
39+
}
40+
41+
public static class PojoNum3580 {
42+
public PojoStateNum3580 state;
43+
public PojoNum3580() {}
44+
public PojoNum3580(PojoStateNum3580 state) {this.state = state;}
45+
}
46+
47+
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
48+
public enum PojoStateNum3580 {
49+
OFF(17),
50+
ON(31),
51+
UNKNOWN(99);
52+
53+
private int value;
54+
55+
PojoStateNum3580(int value) { this.value = value; }
56+
57+
@JsonValue
58+
public int value() {return this.value;}
59+
}
60+
61+
@Test
62+
public void testEnumNumberIntFormatShape3580() throws Exception
63+
{
64+
ObjectMapper mapper = JsonMapper.builder().build();
65+
66+
// Serialize
67+
assertEquals("{\"state\":17}", mapper.writeValueAsString(new Pojo3580(PojoStateInt3580.OFF))); //
68+
assertEquals("{\"state\":31}", mapper.writeValueAsString(new Pojo3580(PojoStateInt3580.ON))); //
69+
assertEquals("{\"state\":99}", mapper.writeValueAsString(new Pojo3580(PojoStateInt3580.UNKNOWN))); //
70+
71+
// Pass Deserialize
72+
assertEquals(PojoStateInt3580.OFF, mapper.readValue("{\"state\":17}", Pojo3580.class).state); // Pojo[state=OFF]
73+
assertEquals(PojoStateInt3580.ON, mapper.readValue("{\"state\":31}", Pojo3580.class).state); // Pojo[state=OFF]
74+
assertEquals(PojoStateInt3580.UNKNOWN, mapper.readValue("{\"state\":99}", Pojo3580.class).state); // Pojo[state=OFF]
75+
76+
// Fail : Try to use ordinal number
77+
assertThrows(InvalidFormatException.class, () -> mapper.readValue("{\"state\":0}", Pojo3580.class));
78+
}
79+
80+
@Test
81+
public void testEnumNumberFormatShape3580() throws Exception
82+
{
83+
ObjectMapper mapper = JsonMapper.builder().build();
84+
85+
// Serialize
86+
assertEquals("{\"state\":17}", mapper.writeValueAsString(new PojoNum3580(PojoStateNum3580.OFF))); //
87+
assertEquals("{\"state\":31}", mapper.writeValueAsString(new PojoNum3580(PojoStateNum3580.ON))); //
88+
assertEquals("{\"state\":99}", mapper.writeValueAsString(new PojoNum3580(PojoStateNum3580.UNKNOWN))); //
89+
90+
// Pass Deserialize
91+
assertEquals(PojoStateNum3580.OFF, mapper.readValue("{\"state\":17}", PojoNum3580.class).state); // Pojo[state=OFF]
92+
assertEquals(PojoStateNum3580.ON, mapper.readValue("{\"state\":31}", PojoNum3580.class).state); // Pojo[state=OFF]
93+
assertEquals(PojoStateNum3580.UNKNOWN, mapper.readValue("{\"state\":99}", PojoNum3580.class).state); // Pojo[state=OFF]
94+
95+
// Fail : Try to use ordinal number
96+
assertThrows(MismatchedInputException.class, () -> mapper.readValue("{\"state\":0}", PojoStateNum3580.class));
97+
}
98+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package tools.jackson.databind.records;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.fasterxml.jackson.annotation.JsonValue;
5+
import tools.jackson.databind.ObjectMapper;
6+
import tools.jackson.databind.exc.MismatchedInputException;
7+
import tools.jackson.databind.json.JsonMapper;
8+
import tools.jackson.databind.testutil.DatabindTestUtil;
9+
10+
import org.junit.jupiter.api.Test;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
import static org.junit.jupiter.api.Assertions.assertThrows;
14+
15+
// [databind#3580] Enum (de)serialization in conjunction with JsonFormat.Shape.NUMBER_INT
16+
public class EnumNumberFormatShapeRecord3580Test
17+
extends DatabindTestUtil
18+
{
19+
public record RecordNumber3580(@JsonFormat(shape = JsonFormat.Shape.NUMBER) RecordState3580 state) {}
20+
21+
public record RecordNumberInt3580(@JsonFormat(shape = JsonFormat.Shape.NUMBER_INT) RecordState3580 state) {}
22+
23+
public enum RecordState3580 {
24+
OFF(17),
25+
ON(31),
26+
UNKNOWN(99);
27+
28+
private int value;
29+
30+
RecordState3580(int value) { this.value = value; }
31+
32+
@JsonValue
33+
public int value() {return this.value;}
34+
}
35+
36+
@Test
37+
public void testEnumNumberFormatShapeRecord3580()
38+
throws Exception
39+
{
40+
ObjectMapper mapper = JsonMapper.builder().build();
41+
42+
// Serialize
43+
assertEquals("{\"state\":17}", mapper.writeValueAsString(new RecordNumber3580(RecordState3580.OFF))); //
44+
assertEquals("{\"state\":31}", mapper.writeValueAsString(new RecordNumber3580(RecordState3580.ON))); //
45+
assertEquals("{\"state\":99}", mapper.writeValueAsString(new RecordNumber3580(RecordState3580.UNKNOWN))); //
46+
47+
// Pass Deserialize
48+
assertEquals(RecordState3580.OFF, mapper.readValue("{\"state\":17}", RecordNumber3580.class).state); // Pojo[state=OFF]
49+
assertEquals(RecordState3580.ON, mapper.readValue("{\"state\":31}", RecordNumber3580.class).state); // Pojo[state=OFF]
50+
assertEquals(RecordState3580.UNKNOWN, mapper.readValue("{\"state\":99}", RecordNumber3580.class).state); // Pojo[state=OFF]
51+
52+
// Fail : Try to use ordinal number
53+
assertThrows(MismatchedInputException.class, () -> mapper.readValue("{\"state\":0}", RecordNumber3580.class));
54+
}
55+
56+
@Test
57+
public void testEnumNumberIntFormatShapeRecord3580()
58+
throws Exception
59+
{
60+
ObjectMapper mapper = JsonMapper.builder().build();
61+
62+
// Serialize
63+
assertEquals("{\"state\":17}", mapper.writeValueAsString(new RecordNumberInt3580(RecordState3580.OFF))); //
64+
assertEquals("{\"state\":31}", mapper.writeValueAsString(new RecordNumberInt3580(RecordState3580.ON))); //
65+
assertEquals("{\"state\":99}", mapper.writeValueAsString(new RecordNumberInt3580(RecordState3580.UNKNOWN))); //
66+
67+
// Pass Deserialize
68+
assertEquals(RecordState3580.OFF, mapper.readValue("{\"state\":17}", RecordNumberInt3580.class).state); // Pojo[state=OFF]
69+
assertEquals(RecordState3580.ON, mapper.readValue("{\"state\":31}", RecordNumberInt3580.class).state); // Pojo[state=OFF]
70+
assertEquals(RecordState3580.UNKNOWN, mapper.readValue("{\"state\":99}", RecordNumberInt3580.class).state); // Pojo[state=OFF]
71+
72+
// Fail : Try to use ordinal number
73+
assertThrows(MismatchedInputException.class, () -> mapper.readValue("{\"state\":0}", RecordNumberInt3580.class));
74+
}
75+
}

0 commit comments

Comments
 (0)