aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlimpbizkit@gmail.com <limpbizkit@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae>2012-10-29 16:30:33 +0000
committerlimpbizkit@gmail.com <limpbizkit@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae>2012-10-29 16:30:33 +0000
commitae7d132db375120494a18e6fb5046ecb69a771a7 (patch)
tree06c1fec3ffc4ea0cee6d4bf5a58debe4443d5cb6
parent4132b0d703d2092f89364e9de3ae9a88eed5e4b7 (diff)
downloadandroid_external_gson-ae7d132db375120494a18e6fb5046ecb69a771a7.tar.gz
android_external_gson-ae7d132db375120494a18e6fb5046ecb69a771a7.tar.bz2
android_external_gson-ae7d132db375120494a18e6fb5046ecb69a771a7.zip
Add a test case for a problem reported on the group.
https://groups.google.com/d/topic/google-gson/EBmOCa8kJPE/discussion git-svn-id: http://google-gson.googlecode.com/svn/trunk/gson@1217 2534bb62-2c4b-0410-85e8-b5006b95c4ae
-rw-r--r--src/test/java/com/google/gson/GsonTypeAdapterTest.java45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/test/java/com/google/gson/GsonTypeAdapterTest.java b/src/test/java/com/google/gson/GsonTypeAdapterTest.java
index b7322bf4..922cecc4 100644
--- a/src/test/java/com/google/gson/GsonTypeAdapterTest.java
+++ b/src/test/java/com/google/gson/GsonTypeAdapterTest.java
@@ -16,12 +16,11 @@
package com.google.gson;
-import junit.framework.TestCase;
-
import java.lang.reflect.Type;
import java.math.BigInteger;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import junit.framework.TestCase;
/**
* Contains numerous tests involving registered type converters with a Gson instance.
@@ -105,4 +104,46 @@ public class GsonTypeAdapterTest extends TestCase {
return new AtomicInteger(--intValue);
}
}
+
+ static abstract class Abstract {
+ String a;
+ }
+
+ static class Concrete extends Abstract {
+ String b;
+ }
+
+ // https://groups.google.com/d/topic/google-gson/EBmOCa8kJPE/discussion
+ public void testDeserializerForAbstractClass() {
+ Concrete instance = new Concrete();
+ instance.a = "android";
+ instance.b = "beep";
+ assertSerialized("{\"a\":\"android\"}", Abstract.class, true, true, instance);
+ assertSerialized("{\"a\":\"android\"}", Abstract.class, true, false, instance);
+ assertSerialized("{\"a\":\"android\"}", Abstract.class, false, true, instance);
+ assertSerialized("{\"a\":\"android\"}", Abstract.class, false, false, instance);
+ assertSerialized("{\"b\":\"beep\",\"a\":\"android\"}", Concrete.class, true, true, instance);
+ assertSerialized("{\"b\":\"beep\",\"a\":\"android\"}", Concrete.class, true, false, instance);
+ assertSerialized("{\"b\":\"beep\",\"a\":\"android\"}", Concrete.class, false, true, instance);
+ assertSerialized("{\"b\":\"beep\",\"a\":\"android\"}", Concrete.class, false, false, instance);
+ }
+
+ private void assertSerialized(String expected, Class<?> instanceType, boolean registerAbstractDeserializer,
+ boolean registerAbstractHierarchyDeserializer, Object instance) {
+ JsonDeserializer<Abstract> deserializer = new JsonDeserializer<Abstract>() {
+ public Abstract deserialize(JsonElement json, Type typeOfT,
+ JsonDeserializationContext context) throws JsonParseException {
+ throw new AssertionError();
+ }
+ };
+ GsonBuilder builder = new GsonBuilder();
+ if (registerAbstractDeserializer) {
+ builder.registerTypeAdapter(Abstract.class, deserializer);
+ }
+ if (registerAbstractHierarchyDeserializer) {
+ builder.registerTypeHierarchyAdapter(Abstract.class, deserializer);
+ }
+ Gson gson = builder.create();
+ assertEquals(expected, gson.toJson(instance, instanceType));
+ }
}