package com.fasterxml.jackson.databind.ser;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class TestAnyGetter extends BaseMapTest
{
static class Bean
{
final static Map<String,Boolean> extra = new HashMap<String,Boolean>();
static {
extra.put("a", Boolean.TRUE);
}
public int getX() { return 3; }
@JsonAnyGetter
public Map<String,Boolean> getExtra() { return extra; }
}
static class AnyOnlyBean
{
@JsonAnyGetter
public Map<String,Integer> any() {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("a", 3);
return map;
}
}
static class MapAsAny
{
protected Map<String,Object> stuff = new LinkedHashMap<String,Object>();
@JsonAnyGetter
public Map<String,Object> any() {
return stuff;
}
public void add(String key, Object value) {
stuff.put(key, value);
}
}
/*
/**********************************************************
/* Test cases
/**********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
public void testSimpleJsonValue() throws Exception
{
String json = MAPPER.writeValueAsString(new Bean());
Map<?,?> map = MAPPER.readValue(json, Map.class);
assertEquals(2, map.size());
assertEquals(Integer.valueOf(3), map.get("x"));
assertEquals(Boolean.TRUE, map.get("a"));
}
// [JACKSON-392]
public void testAnyOnly() throws Exception
{
ObjectMapper m;
// First, with normal fail settings:
m = new ObjectMapper();
m.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
String json = serializeAsString(m, new AnyOnlyBean());
assertEquals("{\"a\":3}", json);
// then without fail
m = new ObjectMapper();
m.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
json = serializeAsString(m, new AnyOnlyBean());
assertEquals("{\"a\":3}", json);
}
// Trying to repro [databind#577]
public void testAnyWithNull() throws Exception
{
MapAsAny input = new MapAsAny();
input.add("bar", null);
assertEquals(aposToQuotes("{'bar':null}"),
MAPPER.writeValueAsString(input));
}
}