diff options
author | limpbizkit@gmail.com <limpbizkit@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae> | 2012-10-29 16:30:33 +0000 |
---|---|---|
committer | limpbizkit@gmail.com <limpbizkit@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae> | 2012-10-29 16:30:33 +0000 |
commit | ae7d132db375120494a18e6fb5046ecb69a771a7 (patch) | |
tree | 06c1fec3ffc4ea0cee6d4bf5a58debe4443d5cb6 | |
parent | 4132b0d703d2092f89364e9de3ae9a88eed5e4b7 (diff) | |
download | android_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.java | 45 |
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)); + } } |