blob: 92267bda69e85e4e12422752d47a894e852ccfaa [file] [log] [blame]
package com.fasterxml.jackson.databind.format;
import java.util.Collections;
import java.util.Map;
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;
}
}
// [databind#2576]
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Enum2576 {
DEFAULT("default"),
ATTRIBUTES("attributes") {
@Override
public String toString() {
return name();
}
};
private final String key;
private Enum2576(String key) {
this.key = key;
}
public String getKey() { return this.key; }
}
/*
/**********************************************************
/* Tests
/**********************************************************
*/
private final ObjectMapper MAPPER = newJsonMapper();
// 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)));
}
// [databind#2576]
public void testEnumWithMethodOverride() throws Exception {
String stringResult = MAPPER.writeValueAsString(Enum2576.ATTRIBUTES);
Map<?,?> result = MAPPER.readValue(stringResult, Map.class);
Map<String,String> exp = Collections.singletonMap("key", "attributes");
assertEquals(exp, result);
}
}