1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package com.fasterxml.jackson.databind.struct;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat.Shape;
import com.fasterxml.jackson.databind.*;
/**
* Unit tests for verifying serialization of simple basic non-structured
* types; primitives (and/or their wrappers), Strings.
*/
public class EnumFormatShapeTest
extends BaseMapTest
{
@JsonFormat(shape=JsonFormat.Shape.OBJECT)
static enum PoNUM {
A("a1"), B("b2");
@JsonProperty
protected final String value;
private PoNUM(String v) { value = v; }
public String getValue() { return value; }
}
static enum OK {
V1("v1");
protected String key;
OK(String key) { this.key = key; }
}
static class PoNUMContainer {
@JsonFormat(shape=Shape.NUMBER)
public OK text = OK.V1;
}
@JsonFormat(shape=JsonFormat.Shape.ARRAY) // alias for 'number', as of 2.5
static enum PoAsArray
{
A, B;
}
// for [databind#572]
static class PoOverrideAsString
{
@JsonFormat(shape=Shape.STRING)
public PoNUM value = PoNUM.B;
}
static class PoOverrideAsNumber
{
@JsonFormat(shape=Shape.NUMBER)
public PoNUM value = PoNUM.B;
}
// for [databind#1543]
@JsonFormat(shape = JsonFormat.Shape.NUMBER_INT)
enum Color {
RED,
YELLOW,
GREEN
}
static class ColorWrapper {
public final Color color;
ColorWrapper(Color color) {
this.color = color;
}
}
/*
/**********************************************************
/* Tests
/**********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
// Tests for JsonFormat.shape
public void testEnumAsObjectValid() throws Exception {
assertEquals("{\"value\":\"a1\"}", MAPPER.writeValueAsString(PoNUM.A));
}
public void testEnumAsIndexViaAnnotations() throws Exception {
assertEquals("{\"text\":0}", MAPPER.writeValueAsString(new PoNUMContainer()));
}
// As of 2.5, use of Shape.ARRAY is legal alias for "write as number"
public void testEnumAsObjectBroken() throws Exception
{
assertEquals("0", MAPPER.writeValueAsString(PoAsArray.A));
}
// [databind#572]
public void testOverrideEnumAsString() throws Exception {
assertEquals("{\"value\":\"B\"}", MAPPER.writeValueAsString(new PoOverrideAsString()));
}
public void testOverrideEnumAsNumber() throws Exception {
assertEquals("{\"value\":1}", MAPPER.writeValueAsString(new PoOverrideAsNumber()));
}
// for [databind#1543]
public void testEnumValueAsNumber() throws Exception {
assertEquals(String.valueOf(Color.GREEN.ordinal()),
MAPPER.writeValueAsString(Color.GREEN));
}
public void testEnumPropertyAsNumber() throws Exception {
assertEquals(String.format(aposToQuotes("{'color':%s}"), Color.GREEN.ordinal()),
MAPPER.writeValueAsString(new ColorWrapper(Color.GREEN)));
}
}
|