New failing test for RuntimeTypeAdapters!
diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
index 7ffee94..ea98361 100644
--- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
+++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
@@ -49,16 +49,17 @@
return new RuntimeTypeAdapter<T>(c, typeFieldName);
}
- public void registerSubtype(Class<? extends T> type, String label) {
+ public RuntimeTypeAdapter<T> registerSubtype(Class<? extends T> type, String label) {
if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) {
throw new IllegalArgumentException("types and labels must be unique");
}
labelToSubtype.put(label, type);
subtypeToLabel.put(type, label);
+ return this;
}
- public void registerSubtype(Class<? extends T> type) {
- registerSubtype(type, type.getSimpleName());
+ public RuntimeTypeAdapter<T> registerSubtype(Class<? extends T> type) {
+ return registerSubtype(type, type.getSimpleName());
}
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
diff --git a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
index 6353c98..033ccd1 100644
--- a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
+++ b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
@@ -23,19 +23,34 @@
public final class RuntimeTypeAdapterTest extends TestCase {
public void testRuntimeTypeAdapter() {
- RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class);
- rta.registerSubtype(CreditCard.class);
-
- CreditCard cc = new CreditCard("Jesse", 234);
+ RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class)
+ .registerSubtype(CreditCard.class);
Gson gson = new GsonBuilder()
.registerTypeAdapter(BillingInstrument.class, rta)
.create();
- String ccJson = gson.toJson(cc, BillingInstrument.class);
- assertEquals("{\"type\":\"CreditCard\",\"cvv\":234,\"ownerName\":\"Jesse\"}", ccJson);
- BillingInstrument creditCard = gson.fromJson(
+ CreditCard original = new CreditCard("Jesse", 234);
+ assertEquals("{\"type\":\"CreditCard\",\"cvv\":234,\"ownerName\":\"Jesse\"}",
+ gson.toJson(original, BillingInstrument.class));
+ BillingInstrument deserialized = gson.fromJson(
"{type:'CreditCard',cvv:234,ownerName:'Jesse'}", BillingInstrument.class);
- assertTrue(creditCard instanceof CreditCard);
+ assertEquals("Jesse", deserialized.ownerName);
+ assertTrue(deserialized instanceof CreditCard);
+ }
+
+ public void testRuntimeTypeIsBaseType() {
+ RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class)
+ .registerSubtype(BillingInstrument.class);
+ Gson gson = new GsonBuilder()
+ .registerTypeAdapter(BillingInstrument.class, rta)
+ .create();
+
+ BillingInstrument original = new BillingInstrument("Jesse");
+ assertEquals("{\"type\":\"BillingInstrument\",\"ownerName\":\"Jesse\"}",
+ gson.toJson(original, BillingInstrument.class));
+ BillingInstrument deserialized = gson.fromJson(
+ "{type:'CreditCard',ownerName:'Jesse'}", BillingInstrument.class);
+ assertEquals("Jesse", deserialized.ownerName);
}
static class CreditCard extends BillingInstrument {