blob: 875c61c80a88ce31d057430f27e480e5e762ae41 [file] [log] [blame]
package com.fasterxml.jackson.databind.deser.jdk;
import java.util.*;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
/**
* Tests for special collection/map types via `java.util.Collections`
*/
public class JDKCollectionsDeserTest extends BaseMapTest
{
static class XBean {
public int x;
public XBean() { }
public XBean(int x) { this.x = x; }
}
/*
/**********************************************************************
/* Test methods
/**********************************************************************
*/
private final static ObjectMapper MAPPER = new ObjectMapper();
// And then a round-trip test for singleton collections
public void testSingletonCollections() throws Exception
{
final TypeReference<?> xbeanListType = new TypeReference<List<XBean>>() { };
String json = MAPPER.writeValueAsString(Collections.singleton(new XBean(3)));
Collection<XBean> result = MAPPER.readValue(json, xbeanListType);
assertNotNull(result);
assertEquals(1, result.size());
assertEquals(3, result.iterator().next().x);
json = MAPPER.writeValueAsString(Collections.singletonList(new XBean(28)));
result = MAPPER.readValue(json, xbeanListType);
assertNotNull(result);
assertEquals(1, result.size());
assertEquals(28, result.iterator().next().x);
}
// [databind#1868]: Verify class name serialized as is
public void testUnmodifiableSet() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
Set<String> theSet = Collections.unmodifiableSet(Collections.singleton("a"));
String json = mapper.writeValueAsString(theSet);
assertEquals("[\"java.util.Collections$UnmodifiableSet\",[\"a\"]]", json);
// 04-Jan-2018, tatu: Alas, no way to make this actually work well, at this point.
// In theory could jiggle things back on deser, using one of two ways:
//
// 1) Do mapping to regular Set/List types (abstract type mapping): would work, but get rid of immutability
// 2) Have actually separate deserializer OR ValueInstantiator
/*
Set<String> result = mapper.readValue(json, Set.class);
assertNotNull(result);
assertEquals(1, result.size());
*/
}
}