blob: bf23ba5726b1ba21cc39e4a9f1121d41e08a96db [file] [log] [blame]
package org.codehaus.jackson.map.ser;
import org.codehaus.jackson.map.BaseMapTest;
import org.codehaus.jackson.annotate.*;
import org.codehaus.jackson.map.*;
/**
* Unit tests for verifying that constraints on ordering of serialized
* properties are held.
*/
public class TestSerializationOrder
extends BaseMapTest
{
/*
/*********************************************
/* Annotated helper classes
/*********************************************
*/
static class BeanWithCreator
{
public int a;
public int b;
public int c;
@JsonCreator public BeanWithCreator(@JsonProperty("c") int c, @JsonProperty("a") int a) {
this.a = a;
this.c = c;
}
}
@JsonPropertyOrder({"c", "a", "b"})
static class BeanWithOrder
{
public int d, b, a, c;
public BeanWithOrder(int a, int b, int c, int d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
}
@JsonPropertyOrder(value={"d"}, alphabetic=true)
static class SubBeanWithOrder extends BeanWithOrder
{
public SubBeanWithOrder(int a, int b, int c, int d) {
super(a, b, c, d);
}
}
@JsonPropertyOrder({"b", "a",
// note: including non-existant properties is fine (has no effect, but not an error)
"foobar",
"c"
})
static class OrderMixIn { }
@JsonPropertyOrder(value={"a","b","x","z"})
static class BeanFor268 { // testing [JACKSON-268]
@JsonProperty("a") public String xA = "a";
@JsonProperty("z") public String aZ = "z";
@JsonProperty("b") public String xB() { return "b"; }
@JsonProperty("x") public String aX() { return "x"; }
}
static class BeanFor459 {
public int d = 4;
public int c = 3;
public int b = 2;
public int a = 1;
}
/*
/*********************************************
/* Unit tests
/*********************************************
*/
// Test for [JACKSON-170]
public void testImplicitOrderByCreator() throws Exception
{
assertEquals("{\"c\":1,\"a\":2,\"b\":0}", serializeAsString(new BeanWithCreator(1, 2)));
}
public void testExplicitOrder() throws Exception
{
assertEquals("{\"c\":3,\"a\":1,\"b\":2,\"d\":4}", serializeAsString(new BeanWithOrder(1, 2, 3, 4)));
}
public void testAlphabeticOrder() throws Exception
{
assertEquals("{\"d\":4,\"a\":1,\"b\":2,\"c\":3}", serializeAsString(new SubBeanWithOrder(1, 2, 3, 4)));
}
public void testOrderWithMixins() throws Exception
{
ObjectMapper m = new ObjectMapper();
m.getSerializationConfig().addMixInAnnotations(BeanWithOrder.class, OrderMixIn.class);
assertEquals("{\"b\":2,\"a\":1,\"c\":3,\"d\":4}", serializeAsString(m, new BeanWithOrder(1, 2, 3, 4)));
}
// Test for [JACKSON-268]
public void testOrderWrt268() throws Exception
{
assertEquals("{\"a\":\"a\",\"b\":\"b\",\"x\":\"x\",\"z\":\"z\"}",
serializeAsString(new BeanFor268()));
}
// Test for [JACKSON-459]
public void testOrderWithFeature() throws Exception
{
ObjectMapper m = new ObjectMapper();
m.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true);
assertEquals("{\"a\":1,\"b\":2,\"c\":3,\"d\":4}", serializeAsString(m, new BeanFor459()));
}
}