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