package com.fasterxml.jackson.databind.views;
import java.io.IOException;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
// for [databind#507], supporting default views
public class DefaultViewTest extends BaseMapTest
{
// Classes that represent views
static class ViewA { }
static class ViewAA extends ViewA { }
static class ViewB { }
static class ViewBB extends ViewB { }
@JsonView(ViewA.class)
@JsonPropertyOrder({ "a", "b" })
static class Defaulting {
public int a = 3;
@JsonView(ViewB.class)
public int b = 5;
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
public void testDeserialization() throws IOException
{
final String JSON = aposToQuotes("{'a':1,'b':2}");
// first: no views:
Defaulting result = MAPPER.readerFor(Defaulting.class)
.readValue(JSON);
assertEquals(result.a, 1);
assertEquals(result.b, 2);
// Then views; first A, then B(B)
result = MAPPER.readerFor(Defaulting.class)
.withView(ViewA.class)
.readValue(JSON);
assertEquals(result.a, 1);
assertEquals(result.b, 5);
result = MAPPER.readerFor(Defaulting.class)
.withView(ViewBB.class)
.readValue(JSON);
assertEquals(result.a, 3);
assertEquals(result.b, 2);
}
public void testSerialization() throws IOException
{
assertEquals(aposToQuotes("{'a':3,'b':5}"),
MAPPER.writeValueAsString(new Defaulting()));
assertEquals(aposToQuotes("{'a':3}"),
MAPPER.writerWithView(ViewA.class)
.writeValueAsString(new Defaulting()));
assertEquals(aposToQuotes("{'b':5}"),
MAPPER.writerWithView(ViewB.class)
.writeValueAsString(new Defaulting()));
}
}