package nebula.data.json;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.math.BigDecimal;
import junit.framework.TestCase;
import nebula.data.Broker;
import nebula.data.DataRepos;
import nebula.data.DataStore;
import nebula.data.Entity;
import nebula.data.impl.EditableEntity;
import nebula.data.impl.DefaultDataRepos;
import nebula.data.impl.TypeDatastore;
import nebula.lang.Type;
import nebula.lang.TypeLoaderForTest;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class JsonProviderTest extends TestCase {
TypeLoaderForTest typeload;
TypeDatastore typeBrokers;
Broker<DataStore<Entity>> store;
DataRepos persistence;
protected void setUp() throws Exception {
typeload = new TypeLoaderForTest();
typeBrokers = new TypeDatastore(typeload);
persistence = new DefaultDataRepos(typeBrokers);
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testPerson() throws Exception {
//@formatter:off
String text = "" +
"type Person { " +
" !Name;" +
" Age;" +
" Decimal;" +
" Date;" +
" Time;" +
" Datetime;" +
" Timestamp;" +
"};";
//@formatter:on
final Type type;
type = typeload.testDefineNebula(new StringReader(text)).get(0);
// store = persistence.define(String.class,Entity.class,
// type.getName());
DataHelper<Entity, Reader, Writer> json = JsonHelperProvider.getHelper(typeBrokers.getBroker(type.getName()));
Entity n = new EditableEntity();
n = json.readFrom(
n,
new StringReader("{" + " \"Name\" :\"wangshilian\", " + " \"Age\" :12, "
+ " \"Decimal\" :9876.5432, " + " \"Date\" :\"2012-12-20\", " + " \"Time\" :\"12:00:12\", "
+ " \"Datetime\" :\"2012-12-20 23:58:59\", " + " \"Timestamp\" :\"2012-12-20 23:58:59.789\" "
+ "}"));
assertEquals("wangshilian", n.get("Name"));
assertEquals(12L, n.get("Age"));
assertEquals(new BigDecimal("9876.5432"), n.get("Decimal"));
DateTimeFormatter sdf;
sdf = DateTimeFormat.forPattern("yyyy-MM-dd");
assertEquals(sdf.parseDateTime("2012-12-20"), n.get("Date"));
sdf = DateTimeFormat.forPattern("kk:mm:ss");
assertEquals(sdf.parseDateTime("12:00:12"), n.get("Time"));
sdf = DateTimeFormat.forPattern("yyyy-MM-dd kk:mm:ss");
assertEquals(sdf.parseDateTime("2012-12-20 23:58:59"), n.get("Datetime"));
sdf = DateTimeFormat.forPattern("yyyy-MM-dd kk:mm:ss.SSS");
assertEquals(sdf.parseDateTime("2012-12-20 23:58:59.789").getMillis(), n.get("Timestamp"));
Writer out = new StringWriter();
json.stringifyTo(n, out);
assertEquals("{\"Name\":\"wangshilian\"," + "\"Age\":12,\"Decimal\":9876.5432," + "\"Date\":\"2012-12-20\","
+ "\"Time\":\"12:00:12\"," + "\"Datetime\":\"2012-12-20 23:58:59\","
+ "\"Timestamp\":\"2012-12-20 23:58:59.789\"}", out.toString());
}
}