Niedzielski has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/316472

Change subject: Hygiene: handle Namespace un/marshalling uniformly
......................................................................

Hygiene: handle Namespace un/marshalling uniformly

Change-Id: I5c851b10baae37ffd764ebcba5ebe9b9c2be44e3
---
M app/src/main/java/org/wikipedia/feed/model/CardPageItem.java
M app/src/main/java/org/wikipedia/json/GsonUtil.java
A app/src/test/java/org/wikipedia/json/NamespaceTypeAdapterTest.java
3 files changed, 68 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/72/316472/1

diff --git a/app/src/main/java/org/wikipedia/feed/model/CardPageItem.java 
b/app/src/main/java/org/wikipedia/feed/model/CardPageItem.java
index 2daeec5..d7534bd 100644
--- a/app/src/main/java/org/wikipedia/feed/model/CardPageItem.java
+++ b/app/src/main/java/org/wikipedia/feed/model/CardPageItem.java
@@ -4,9 +4,6 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
-import com.google.gson.annotations.JsonAdapter;
-
-import org.wikipedia.json.NamespaceTypeAdapter;
 import org.wikipedia.page.Namespace;
 import org.wikipedia.util.StringUtil;
 
@@ -16,7 +13,7 @@
     @SuppressWarnings("unused") @Nullable private Thumbnail thumbnail;
     @SuppressWarnings("unused") @Nullable private String description;
     @SuppressWarnings("unused") @Nullable private String extract;
-    @SuppressWarnings("unused") @NonNull 
@JsonAdapter(NamespaceTypeAdapter.class) private Namespace namespace = 
Namespace.MAIN;
+    @SuppressWarnings("unused") @NonNull private Namespace namespace = 
Namespace.MAIN;
 
     @NonNull
     public String title() {
diff --git a/app/src/main/java/org/wikipedia/json/GsonUtil.java 
b/app/src/main/java/org/wikipedia/json/GsonUtil.java
index fd9f2a9..3761d15 100644
--- a/app/src/main/java/org/wikipedia/json/GsonUtil.java
+++ b/app/src/main/java/org/wikipedia/json/GsonUtil.java
@@ -5,11 +5,14 @@
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
+import org.wikipedia.page.Namespace;
+
 public final class GsonUtil {
     private static final String DATE_FORMAT = "MMM dd, yyyy HH:mm:ss";
     private static final Gson DEFAULT_GSON = new GsonBuilder()
             .setDateFormat(DATE_FORMAT)
             .registerTypeAdapter(Uri.class, new UriTypeAdapter())
+            .registerTypeHierarchyAdapter(Namespace.class, new 
NamespaceTypeAdapter().nullSafe())
             .create();
 
     public static Gson getDefaultGson() {
@@ -17,4 +20,4 @@
     }
 
     private GsonUtil() { }
-}
+}
\ No newline at end of file
diff --git a/app/src/test/java/org/wikipedia/json/NamespaceTypeAdapterTest.java 
b/app/src/test/java/org/wikipedia/json/NamespaceTypeAdapterTest.java
new file mode 100644
index 0000000..afed55f
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/json/NamespaceTypeAdapterTest.java
@@ -0,0 +1,63 @@
+package org.wikipedia.json;
+
+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.page.Namespace;
+
+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 
NamespaceTypeAdapterTest {
+    @Parameters(name = "{0}") public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][] {{DeferredParam.NULL}, 
{DeferredParam.SPECIAL},
+                {DeferredParam.MAIN}, {DeferredParam.TALK}});
+    }
+
+    @Nullable private final Namespace namespace;
+
+    public NamespaceTypeAdapterTest(@NonNull DeferredParam param) {
+        this.namespace = param.val();
+    }
+
+    @Test public void testWriteRead() {
+        Namespace result = unmarshal(Namespace.class, marshal(namespace));
+        assertThat(result, is(namespace));
+    }
+
+    // Uri is a roboelectric mocked class which is unavailable at static time; 
defer evaluation
+    // until TestRunner is executed
+    private enum DeferredParam {
+        NULL() {
+            @Nullable @Override
+            Namespace val() {
+                return null;
+            }
+        },
+        SPECIAL() {
+            @Nullable @Override Namespace val() {
+                return Namespace.SPECIAL;
+            }
+        },
+        MAIN() {
+            @Nullable @Override Namespace val() {
+                return Namespace.MAIN;
+            }
+        },
+        TALK() {
+            @Nullable @Override Namespace val() {
+                return Namespace.TALK;
+            }
+        };
+
+        @Nullable abstract Namespace val();
+    }
+}
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/316472
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5c851b10baae37ffd764ebcba5ebe9b9c2be44e3
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to