package nebula.data.json;
import java.io.StringReader;
import java.io.StringWriter;
import junit.framework.TestCase;
import nebula.lang.Type;
import nebula.lang.TypeLoaderForTest;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParser;
public class TypeJsonDataDealerTest extends TestCase {
TypeLoaderForTest loader;
Type type;
JsonFactory factory;
TypeSerializer dataDealer;
protected void setUp() throws Exception {
super.setUp();
factory = new JsonFactory();
loader = new TypeLoaderForTest();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public final void testTypeJsonDataDealer() throws Exception {
dataDealer = new TypeSerializer();
}
public final void testReadFromJsonParserString() throws Exception {
//@formatter:off
String text = "" +
"type Person {" +
" !PersonName Name;" +
" Age;" +
"};";
//@formatter:on
type = loader.testDefineNebula(new StringReader(text)).get(0);
dataDealer = new TypeSerializer();
StringReader in = new StringReader("");
JsonParser jsonParser = factory.createJsonParser(in);
try {
dataDealer.readFrom(null, jsonParser);
fail("Should throw new exception");
} catch (RuntimeException e) {
assertTrue(e instanceof UnsupportedOperationException);
}
}
public final void testWriteToStringObjectJsonGenerator() throws Exception {
//@formatter:off
String text = "" +
"type Person {" +
" !PersonName Name;" +
" Age;" +
"};";
//@formatter:on
type = loader.testDefineNebula(new StringReader(text)).get(0);
dataDealer = new TypeSerializer();
StringWriter out = new StringWriter();
JsonGenerator gen = factory.createJsonGenerator(out);
dataDealer.stringifyTo(type, gen);
gen.flush();
assertEquals(
"{\"Name\":\"Person\",\"SuperType\":\"Master\",\"Standalone\":\"Master\",\"Fields\":[{\"Name\":\"PersonName\",\"Key\":true,\"Unique\":true,\"Core\":false,\"Array\":false,\"TypeName\":\"Name\",\"Refer\":\"ByVal\",\"NameAlias\":{},\"Attrs\":{\"MaxLength\":\"60\",\"ShouldBeLeader\":\"ShouldBeLeader\",\"FormatType\":\"text\"}},{\"Name\":\"Age\",\"Key\":false,\"Unique\":false,\"Core\":false,\"Array\":false,\"TypeName\":\"Age\",\"Refer\":\"ByVal\",\"NameAlias\":{},\"Attrs\":{\"MaxLength\":\"3\",\"Precision\":\"10\",\"Max\":\"160\",\"InputSize\":\"small\",\"Scale\":\"2\",\"Min\":\"0\",\"FormatType\":\"numeric\"}}],\"NameAlias\":{},\"Attrs\":{\"Layout\":\"Basic\"},\"Mutable\":false,\"Code\":\"type Person {\\t!PersonName Name;\\tAge;};\\n\"}",
out.toString());
System.out.println(out.toString());
}
}