package de.galan.verjson.core;
import static de.galan.commons.test.Tests.*;
import static org.assertj.core.api.Assertions.*;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import de.galan.commons.test.AbstractTestParent;
import de.galan.commons.time.ApplicationClock;
import de.galan.verjson.test.MyContainer;
import de.galan.verjson.test.TestBean;
/**
* CUT Verjson - plugging external serializer/deserializer into Verjson
*
* @author daniel
*/
public class VerjsonSerializerTest extends AbstractTestParent {
private Verjson<MyContainer> verjson;
@Before
public void before() throws Exception {
Versions versions = new Versions();
versions.registerSerializer(new TestBeanSerializer());
versions.registerDeserializer(new TestBeanDeserializer());
verjson = new Verjson<MyContainer>(MyContainer.class, versions);
ApplicationClock.setUtc("2014-05-06T06:42:28Z");
}
@Test
public void testName() throws Exception {
String written = verjson.write(new MyContainer(new TestBean().number(123L).content("abc")));
assertThat(written).isEqualTo(readFile(getClass(), "serializer-written.json"));
}
}
/** Test Serialzer */
class TestBeanSerializer extends JsonSerializer<TestBean> {
@Override
public void serialize(TestBean value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeString(value.number + ":" + value.content);
}
@Override
public Class<TestBean> handledType() {
return TestBean.class;
}
}
/** Test Serialzer */
class TestBeanDeserializer extends JsonDeserializer<TestBean> {
@Override
public TestBean deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String[] split = jp.getText().split(":");
return new TestBean().number(Long.valueOf(split[0])).content(split[1]);
}
}