jenkins-bot has submitted this change and it was merged.
Change subject: Fix un/marshalling of Uris to extend to subclasses
..
Fix un/marshalling of Uris to extend to subclasses
GsonBuilder.registerTypeAdapter() does not consider type hierarchies.
Uri is an abstract type so all instances will always be a subclass. Use
registerTypeHierarchyAdapter() instead. Also, move null handling to
TypeAdapter.nullSafe() and add tests.
Change-Id: I59ba6a9e32e898f28c9d1248fd39c20c71eebca1
---
M app/src/main/java/org/wikipedia/json/GsonUtil.java
M app/src/main/java/org/wikipedia/json/UriTypeAdapter.java
A app/src/test/java/org/wikipedia/json/UriTypeAdapterTest.java
3 files changed, 67 insertions(+), 7 deletions(-)
Approvals:
Dbrant: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/json/GsonUtil.java
b/app/src/main/java/org/wikipedia/json/GsonUtil.java
index 3761d15..81c4831 100644
--- a/app/src/main/java/org/wikipedia/json/GsonUtil.java
+++ b/app/src/main/java/org/wikipedia/json/GsonUtil.java
@@ -11,7 +11,7 @@
private static final String DATE_FORMAT = "MMM dd, HH:mm:ss";
private static final Gson DEFAULT_GSON = new GsonBuilder()
.setDateFormat(DATE_FORMAT)
-.registerTypeAdapter(Uri.class, new UriTypeAdapter())
+.registerTypeHierarchyAdapter(Uri.class, new
UriTypeAdapter().nullSafe())
.registerTypeHierarchyAdapter(Namespace.class, new
NamespaceTypeAdapter().nullSafe())
.create();
diff --git a/app/src/main/java/org/wikipedia/json/UriTypeAdapter.java
b/app/src/main/java/org/wikipedia/json/UriTypeAdapter.java
index 4f06b44..07ffa51 100644
--- a/app/src/main/java/org/wikipedia/json/UriTypeAdapter.java
+++ b/app/src/main/java/org/wikipedia/json/UriTypeAdapter.java
@@ -11,17 +11,12 @@
public class UriTypeAdapter extends TypeAdapter {
@Override
public void write(JsonWriter out, Uri value) throws IOException {
-out.value(value == null ? null : value.toString());
+out.value(value.toString());
}
@Override
public Uri read(JsonReader in) throws IOException {
String url = in.nextString();
-
-if (url == null) {
-return null;
-}
-
return Uri.parse(url);
}
}
diff --git a/app/src/test/java/org/wikipedia/json/UriTypeAdapterTest.java
b/app/src/test/java/org/wikipedia/json/UriTypeAdapterTest.java
new file mode 100644
index 000..f2e08ee
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/json/UriTypeAdapterTest.java
@@ -0,0 +1,65 @@
+package org.wikipedia.json;
+
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.ParameterizedRobolectricTestRunner;
+import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
+import org.wikipedia.Constants;
+
+import java.util.Arrays;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.wikipedia.json.GsonMarshaller.marshal;
+import static org.wikipedia.json.GsonUnmarshaller.unmarshal;
+
+@RunWith(ParameterizedRobolectricTestRunner.class) public class
UriTypeAdapterTest {
+@Parameters(name = "{0}") public static Iterable