11package com .fasterxml .jackson .module .paramnames ;
22
3- import org .junit .Test ;
4-
3+ import com .fasterxml .jackson .annotation .JsonCreator ;
54import com .fasterxml .jackson .annotation .JsonProperty ;
5+ import com .fasterxml .jackson .annotation .JsonValue ;
66import com .fasterxml .jackson .databind .ObjectMapper ;
77
88import static org .junit .Assert .assertEquals ;
99
10- public class EnumNamingTest
10+ import org .junit .Test ;
11+
12+ public class EnumNamingTest extends ModuleTestBase
1113{
1214 enum SurprisingEnum32 {
1315 @ JsonProperty ("customValue" )
1416 ENUM_NAME ;
1517 }
16-
17- // for [module-parameter-names#32]
18+
19+ // [modules-java8#234]
20+ static enum MeetingStatus {
21+ UNKNOWN (0 ),
22+ INITIALIZING (1 ),
23+ PROGRESSING (2 ),
24+ TERMINATED (3 ),
25+ ;
26+
27+ public final int status ;
28+
29+ @ JsonValue
30+ public int getStatus () {
31+ return status ;
32+ }
33+
34+ MeetingStatus (int status ) {
35+ this .status = status ;
36+ }
37+
38+ @ JsonCreator (mode = JsonCreator .Mode .DELEGATING )
39+ public static MeetingStatus parse (Integer status ) {
40+ if (status == null ) {
41+ return UNKNOWN ;
42+ }
43+ int s = status .intValue ();
44+ for (MeetingStatus value : values ()) {
45+ if (s == value .status ) {
46+ return value ;
47+ }
48+ }
49+ return UNKNOWN ;
50+ }
51+
52+ }
53+
54+ static class Meeting {
55+ public MeetingStatus status ;
56+ }
57+
58+ private final ObjectMapper MAPPER = newMapper ();
59+
1860 @ Test
1961 public void testCustomEnumName () throws Exception
2062 {
2163 final String EXP = "\" customValue\" " ;
2264
2365 // First, verify default handling
2466
25- String json = new ObjectMapper ()
67+ String json = MAPPER
2668 .writeValueAsString (SurprisingEnum32 .ENUM_NAME );
2769 assertEquals (EXP , json );
2870
@@ -36,4 +78,19 @@ public void testCustomEnumName() throws Exception
3678 SurprisingEnum32 value = mapperWithNames .readValue (json , SurprisingEnum32 .class );
3779 assertEquals (SurprisingEnum32 .ENUM_NAME , value );
3880 }
81+
82+ // [modules-java8#234]
83+ @ Test
84+ public void testEnumWithCreator () throws Exception
85+ {
86+ // it's ok when serializing
87+ Meeting meetingSrc = new Meeting ();
88+ meetingSrc .status = MeetingStatus .PROGRESSING ;
89+
90+ String json = MAPPER .writeValueAsString (meetingSrc );
91+
92+ // but throws exception when deserializing
93+ Meeting result = MAPPER .readValue (json , Meeting .class );
94+ assertEquals (MeetingStatus .PROGRESSING , result .status );
95+ }
3996}
0 commit comments