SerializerCacheTest.java
package tools.jackson.databind.ser;
import org.junit.jupiter.api.Test;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.JavaType;
import tools.jackson.databind.SerializationContext;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.ser.impl.ReadOnlyClassToSerializerMap;
import tools.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertSame;
public class SerializerCacheTest extends DatabindTestUtil
{
static class TestSerializer extends ValueSerializer<Object>
{
@Override
public void serialize(Object value, JsonGenerator gen, SerializationContext ctxt) { }
}
@Test
public void replaceTypedClassSerializerInvalidatesReadOnlyLookup()
{
SerializerCache cache = new SerializerCache();
TestSerializer serializer1 = new TestSerializer();
TestSerializer serializer2 = new TestSerializer();
cache.addTypedSerializer(String.class, serializer1);
ReadOnlyClassToSerializerMap lookup = cache.getReadOnlyLookupMap();
assertSame(serializer1, lookup.typedValueSerializer(String.class));
cache.addTypedSerializer(String.class, serializer2);
assertSame(serializer2, cache.getReadOnlyLookupMap().typedValueSerializer(String.class));
}
@Test
public void replaceTypedJavaTypeSerializerInvalidatesReadOnlyLookup()
{
SerializerCache cache = new SerializerCache();
JavaType type = defaultTypeFactory().constructType(String.class);
TestSerializer serializer1 = new TestSerializer();
TestSerializer serializer2 = new TestSerializer();
cache.addTypedSerializer(type, serializer1);
ReadOnlyClassToSerializerMap lookup = cache.getReadOnlyLookupMap();
assertSame(serializer1, lookup.typedValueSerializer(type));
cache.addTypedSerializer(type, serializer2);
assertSame(serializer2, cache.getReadOnlyLookupMap().typedValueSerializer(type));
}
}