package tc.oc.document;
import com.google.gson.JsonObject;
import java.time.Instant;
import org.junit.Test;
import tc.oc.ApiTest;
import tc.oc.api.annotations.Serialize;
import static org.junit.Assert.*;
public class DocumentDeserializationTest extends ApiTest {
JsonObject jsonObject = new JsonObject();
void jsonIn(String key, Object value) {
jsonObject.add(key, gson.toJsonTree(value));
}
<T> T deserialize(Class<T> type) {
return gson.fromJson(jsonObject, type);
}
@Test
public void testClassDoc() throws Exception {
jsonIn("number", 123);
jsonIn("text", "abc");
ClassDoc doc = deserialize(ClassDoc.class);
assertEquals(123, doc.number);
assertEquals("abc", doc.text);
}
@Test
public void testInterfaceDoc() throws Exception {
jsonIn("number", 123);
jsonIn("text", "abc");
InterfaceDocImpl doc = deserialize(InterfaceDocImpl.class);
assertEquals(123, doc.number());
assertEquals("abc", doc.text());
}
@Test
public void testGeneratedDoc() throws Exception {
jsonIn("number", 123);
jsonIn("text", "abc");
InterfaceDoc doc = deserialize(InterfaceDoc.class);
assertEquals(123, doc.number());
assertEquals("abc", doc.text());
}
@Test
public void testGeneratedFieldWithParameterizedTypeWhereTypeParameterHasCustomDeserializer() throws Exception {
jsonIn("instants", new String[] { ISO_DATE });
GenericFieldInterfaceDoc doc = deserialize(GenericFieldInterfaceDoc.class);
assertTrue("List<Instant> was deserialized as List, generic type info was lost",
doc.instants().get(0) instanceof Instant);
}
}
class InterfaceDocImpl implements InterfaceDoc {
private int number;
private String text;
@Serialize public void number(int n) {number = n; }
@Serialize public void text(String t) { text = t; }
@Override public int number() { return number; }
@Override public String text() { return text; }
}