blob: 8ba23da74e6bb8c0c39859d502c15d49e29c1c06 [file] [log] [blame]
package elemental.json.impl;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import junit.framework.TestCase;
import elemental.json.Json;
import elemental.json.JsonArray;
import elemental.json.JsonNull;
import elemental.json.JsonObject;
import elemental.json.JsonValue;
public class JsonSerializationJreTest extends TestCase {
public void testSerializeNull() throws Exception {
JsonNull null1 = Json.createNull();
JsonNull null2 = Json.createNull();
JsonValue out = serializeDeserialize(null1);
assertJsonEquals(null1, out);
assertSame(null1, out);
assertSame(null2, out);
assertSame(JreJsonNull.NULL_INSTANCE, out);
}
public void testSerializeObject() throws Exception {
JsonObject foo = Json.createObject();
foo.put("true", true);
foo.put("string", "string");
foo.put("number", 1.25);
JsonObject subObject = Json.createObject();
subObject.put("false", false);
subObject.put("string2", "string2");
subObject.put("number", -151);
JsonArray subArray = Json.createArray();
subArray.set(0, true);
subArray.set(1, 1);
subArray.set(2, "2");
foo.put("object", subObject);
foo.put("array", subArray);
foo.put("null", Json.createNull());
assertJsonEqualsAfterSerialization(foo);
}
public void testSerializeArray() throws Exception {
JsonObject subObject = Json.createObject();
subObject.put("false", false);
subObject.put("string2", "string2");
subObject.put("number", -151);
JsonArray subArray = Json.createArray();
subArray.set(0, true);
subArray.set(1, 1);
subArray.set(2, "2");
JsonArray array = Json.createArray();
array.set(0, true);
array.set(1, false);
array.set(2, 2);
array.set(3, "3");
array.set(4, subObject);
array.set(5, subArray);
assertJsonEqualsAfterSerialization(array);
}
public void testSerializeBoolean() throws Exception {
assertJsonEqualsAfterSerialization(Json.create(true));
assertJsonEqualsAfterSerialization(Json.create(false));
}
public void testSerializeString() throws Exception {
assertJsonEqualsAfterSerialization(Json.create("foo"));
assertJsonEqualsAfterSerialization(Json.create(""));
}
public void testSerializeNumber() throws Exception {
assertJsonEqualsAfterSerialization(Json.create(0));
assertJsonEqualsAfterSerialization(Json.create(-1.213123123));
}
private <T extends Serializable & JsonValue> void assertJsonEqualsAfterSerialization(
T in) throws Exception {
T out = serializeDeserialize(in);
assertNotSame(in, out);
assertJsonEquals(in, out);
}
private void assertJsonEquals(JsonValue a, JsonValue b) {
assertEquals(a.toJson(), b.toJson());
}
@SuppressWarnings("unchecked")
public <T extends Serializable & JsonValue> T serializeDeserialize(
T originalJsonValue) throws Exception {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buffer);
out.writeObject(originalJsonValue);
out.close();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(
buffer.toByteArray()));
T processedJsonValue = (T) in.readObject();
in.close();
return processedJsonValue;
}
}