From 6d90f0d894c468bc2f5b1e138ef21174ae644a0b Mon Sep 17 00:00:00 2001 From: Joel Leitch Date: Thu, 20 Dec 2012 07:57:17 +0000 Subject: [PATCH] Make JsonElement TypeAdapterFactory a type hierarchy factory. --- .../gson/internal/bind/TypeAdapters.java | 2 +- .../functional/DefaultTypeAdaptersTest.java | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java index eabfe831..d32458cc 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java +++ b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java @@ -703,7 +703,7 @@ public final class TypeAdapters { }; public static final TypeAdapterFactory JSON_ELEMENT_FACTORY - = newFactory(JsonElement.class, JSON_ELEMENT); + = newTypeHierarchyFactory(JsonElement.class, JSON_ELEMENT); private static final class EnumTypeAdapter> extends TypeAdapter { private final Map nameToConstant = new HashMap(); diff --git a/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java index 9b27ef15..d9bb9492 100644 --- a/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java @@ -554,17 +554,23 @@ public class DefaultTypeAdaptersTest extends TestCase { public void testJsonPrimitiveDeserialization() { assertEquals(new JsonPrimitive(5), gson.fromJson("5", JsonElement.class)); + assertEquals(new JsonPrimitive(5), gson.fromJson("5", JsonPrimitive.class)); assertEquals(new JsonPrimitive(true), gson.fromJson("true", JsonElement.class)); + assertEquals(new JsonPrimitive(true), gson.fromJson("true", JsonPrimitive.class)); assertEquals(new JsonPrimitive("foo"), gson.fromJson("\"foo\"", JsonElement.class)); + assertEquals(new JsonPrimitive("foo"), gson.fromJson("\"foo\"", JsonPrimitive.class)); assertEquals(new JsonPrimitive('a'), gson.fromJson("\"a\"", JsonElement.class)); + assertEquals(new JsonPrimitive('a'), gson.fromJson("\"a\"", JsonPrimitive.class)); } public void testJsonNullSerialization() { assertEquals("null", gson.toJson(JsonNull.INSTANCE, JsonElement.class)); + assertEquals("null", gson.toJson(JsonNull.INSTANCE, JsonNull.class)); } public void testNullJsonElementSerialization() { assertEquals("null", gson.toJson(null, JsonElement.class)); + assertEquals("null", gson.toJson(null, JsonNull.class)); } public void testJsonArraySerialization() { @@ -575,12 +581,15 @@ public class DefaultTypeAdaptersTest extends TestCase { assertEquals("[1,2,3]", gson.toJson(array, JsonElement.class)); } - public void testJsonArrayDeerialization() { + public void testJsonArrayDeserialization() { JsonArray array = new JsonArray(); array.add(new JsonPrimitive(1)); array.add(new JsonPrimitive(2)); array.add(new JsonPrimitive(3)); - assertEquals(array, gson.fromJson("[1,2,3]", JsonElement.class)); + + String json = "[1,2,3]"; + assertEquals(array, gson.fromJson(json, JsonElement.class)); + assertEquals(array, gson.fromJson(json, JsonArray.class)); } public void testJsonObjectSerialization() { @@ -595,16 +604,17 @@ public class DefaultTypeAdaptersTest extends TestCase { object.add("foo", new JsonPrimitive(1)); object.add("bar", new JsonPrimitive(2)); - JsonElement actual = gson.fromJson("{\"foo\":1,\"bar\":2}", JsonElement.class); + String json = "{\"foo\":1,\"bar\":2}"; + JsonElement actual = gson.fromJson(json, JsonElement.class); assertEquals(object, actual); + + JsonObject actualObj = gson.fromJson(json, JsonObject.class); + assertEquals(object, actualObj); } - public void testJsonNullDeerialization() { - assertEquals(JsonNull.INSTANCE, gson.fromJson("null", JsonElement.class)); - } - - public void testNullJsonElementDeserialization() { + public void testJsonNullDeserialization() { assertEquals(JsonNull.INSTANCE, gson.fromJson("null", JsonElement.class)); + assertEquals(JsonNull.INSTANCE, gson.fromJson("null", JsonNull.class)); } private static class ClassWithBigDecimal {