| 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; |
| } |
| |
| } |