package net.nullschool.grains.jackson.datatype;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.smile.SmileFactory;
import com.fasterxml.jackson.dataformat.xml.XmlFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import net.nullschool.collect.basic.BasicToolsTest;
import net.nullschool.grains.generate.model.*;
import net.nullschool.grains.jackson.JacksonTools;
import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
import static net.nullschool.collect.basic.BasicCollections.listOf;
import static net.nullschool.collect.basic.BasicCollections.mapOf;
import static net.nullschool.grains.generate.model.CompleteTest.newCompleteBuilderWithSampleValues;
import static org.junit.Assert.assertEquals;
/**
* 2013-06-07<p/>
*
* @author Cameron Beccario
*/
public class JacksonTest {
@Test
public void test_complete_serialization_json() throws IOException {
CompleteGrain expected = newCompleteBuilderWithSampleValues().build();
assertEquals(28, expected.size());
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper();
String data = mapper.writeValueAsString(expected);
assertEquals(
"{'a':true,'b':1,'c':2,'d':2,'e':3,'f':1,'g':1.0,'h':-1.0,'i':10,'j':'a','k':'hello','l':" +
"'1bd31d66-eda2-4395-a2a7-510bd581e3ab','m':'http://nullschool.net','o':'green','p':" +
"{'id':1},'q':[1,2],'r':[{'id':1},{'id':2}],'s':[2,3],'t':[{'id':2},{'id':3}],'u':['a','b'],'v':" +
"[{'id':4},{'id':5}],'w':{'a':1,'b':2},'x':{'a':{'id':6},'b':{'id':7}},'y':['x','y'],'z':{'1':" +
"{'id':8},'2':{'id':9}},'za':{'a':[[{'id':1},{'id':2}]]},'zb':[['a','b'],['c','d']]}",
data.replace('\"', '\'')); // replace quotes for sanity
CompleteGrain actual = mapper.readValue(data, CompleteGrain.class);
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
@Test
public void test_complete_serialization_smile() throws IOException {
CompleteGrain expected = newCompleteBuilderWithSampleValues().build();
assertEquals(28, expected.size());
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper(new SmileFactory());
byte[] data = mapper.writeValueAsBytes(expected);
assertEquals(
":)a1fa80a#80bc280cc480dc480ec680f&810180g(3|00080h)1?x000000080i*80815080j@a80kDhello80lc1bd31d6" +
"6-eda2-4395-a2a7-510bd581e3ab80mThttp://nullschool.net80oDgreen80pfa81idc2fb80qf8c2c4f980rf8" +
"faOc2fbfaOc4fbf980sf8c4c6f980tf8faOc4fbfaOc6fbf980uf8@a@bf980vf8faOc8fbfaOcafbf980wfa@c2Ac4f" +
"b80xfa@faOccfbAfaOcefbfb80yf8@x@yf980zfa801faOd0fb802faOd2fbfb81zafa@f8f8faOc2fbfaOc4fbf9f9f" +
"b81zbf8f8@a@bf9f8@c@df9f9fb",
BasicToolsTest.asReadableString(data));
CompleteGrain actual = mapper.readValue(data, CompleteGrain.class);
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
@Ignore @Test
public void test_complete_serialization_xml() throws IOException {
// UNDONE: xml support
CompleteGrain expected = newCompleteBuilderWithSampleValues().build();
assertEquals(28, expected.size());
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper(new XmlFactory());
String data = mapper.writeValueAsString(expected);
assertEquals(
"",
data);
CompleteGrain actual = mapper.readValue(data, CompleteGrain.class);
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
@Test
public void test_complete_serialization_yaml() throws IOException {
CompleteGrain expected = newCompleteBuilderWithSampleValues().build();
assertEquals(28, expected.size());
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper(new YAMLFactory());
String data = mapper.writeValueAsString(expected);
assertEquals(
"---|a: true|b: 1|c: 2|d: 2|e: 3|f: 1|g: 1.0|h: -1.0|i: 10|j: 'a'|k: 'hello'|l: '1bd31d66-eda2-43" +
"95-a2a7-510bd581e3ab'|m: 'http://nullschool.net'|o: 'green'|p:| id: 1|q:|- 1|- 2|r:|- id: 1" +
"|- id: 2|s:|- 2|- 3|t:|- id: 2|- id: 3|u:|- 'a'|- 'b'|v:|- id: 4|- id: 5|w:| a: 1| b: 2|x:" +
"| a:| id: 6| b:| id: 7|y:|- 'x'|- 'y'|z:| 1:| id: 8| 2:| id: 9|za:| a:| - " +
"- id: 1| - id: 2|zb:|- - 'a'| - 'b'|- - 'c'| - 'd'|",
data.replace('\"', '\'').replace('\n', '|')); // replace quotes and line breaks for sanity
CompleteGrain actual = mapper.readValue(data, CompleteGrain.class);
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
@Test
public void test_sparse_serialization_json() throws IOException {
CompleteGrain expected = CompleteFactory.defaultValue();
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper();
String data = mapper.writeValueAsString(expected);
assertEquals("{}", data);
CompleteGrain actual = mapper.readValue(data, CompleteGrain.class);
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
@Test
public void test_extension_serialization_json() throws IOException {
NodeGrain expected = NodeFactory.newBuilder().setId(10).build();
expected = expected.with("x", 1);
expected = expected.with("y", 2);
expected = expected.with("z", null); // expected that this extension key will be dropped
expected = expected.with("extraMap", mapOf("a", 1, "b", 2));
expected = expected.with("extraList", listOf(1, 2));
ObjectMapper mapper = JacksonTools.newGrainsObjectMapper();
String data = mapper.writeValueAsString(expected);
assertEquals(
"{'id':10,'extraList':[1,2],'extraMap':{'a':1,'b':2},'x':1,'y':2}",
data.replace('\"', '\''));
NodeGrain actual = mapper.readValue(data, NodeGrain.class);
expected = expected.without("z");
assertEquals(expected, actual);
assertEquals(
BasicToolsTest.asTypeHierarchy(expected),
BasicToolsTest.asTypeHierarchy(actual));
}
}