jenkins-bot has submitted this change and it was merged.

Change subject: Add tests for field checking with the new @Require annotation
......................................................................


Add tests for field checking with the new @Require annotation

Bug: T145075
Change-Id: I2f5add17352ae234ea860be1c7f291909eced67d
---
M app/src/main/java/org/wikipedia/json/GsonUtil.java
A 
app/src/test/java/org/wikipedia/json/RequiredFieldsCheckOnReadTypeAdapterFactoryTest.java
2 files changed, 195 insertions(+), 3 deletions(-)

Approvals:
  jenkins-bot: Verified
  Niedzielski: Looks good to me, approved



diff --git a/app/src/main/java/org/wikipedia/json/GsonUtil.java 
b/app/src/main/java/org/wikipedia/json/GsonUtil.java
index b2a2429..57462d1 100644
--- a/app/src/main/java/org/wikipedia/json/GsonUtil.java
+++ b/app/src/main/java/org/wikipedia/json/GsonUtil.java
@@ -1,6 +1,7 @@
 package org.wikipedia.json;
 
 import android.net.Uri;
+import android.support.annotation.VisibleForTesting;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -9,16 +10,24 @@
 
 public final class GsonUtil {
     private static final String DATE_FORMAT = "MMM dd, yyyy HH:mm:ss";
-    private static final Gson DEFAULT_GSON = new GsonBuilder()
+
+    private static final GsonBuilder DEFAULT_GSON_BUILDER = new GsonBuilder()
             .setDateFormat(DATE_FORMAT)
             .registerTypeHierarchyAdapter(Uri.class, new 
UriTypeAdapter().nullSafe())
             .registerTypeHierarchyAdapter(Namespace.class, new 
NamespaceTypeAdapter().nullSafe())
-            .registerTypeAdapterFactory(new 
RequiredFieldsCheckOnReadTypeAdapterFactory())
-            .create();
+            .registerTypeAdapterFactory(new 
RequiredFieldsCheckOnReadTypeAdapterFactory());
+
+    private static final Gson DEFAULT_GSON = DEFAULT_GSON_BUILDER.create();
+
 
     public static Gson getDefaultGson() {
         return DEFAULT_GSON;
     }
 
+    @VisibleForTesting
+    public static GsonBuilder getDefaultGsonBuilder() {
+        return DEFAULT_GSON_BUILDER;
+    }
+
     private GsonUtil() { }
 }
\ No newline at end of file
diff --git 
a/app/src/test/java/org/wikipedia/json/RequiredFieldsCheckOnReadTypeAdapterFactoryTest.java
 
b/app/src/test/java/org/wikipedia/json/RequiredFieldsCheckOnReadTypeAdapterFactoryTest.java
new file mode 100644
index 0000000..b1fa30d
--- /dev/null
+++ 
b/app/src/test/java/org/wikipedia/json/RequiredFieldsCheckOnReadTypeAdapterFactoryTest.java
@@ -0,0 +1,183 @@
+package org.wikipedia.json;
+
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.google.gson.Gson;
+import com.google.gson.annotations.SerializedName;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.wikipedia.Constants;
+import org.wikipedia.json.annotations.Required;
+import org.wikipedia.model.BaseModel;
+import org.wikipedia.test.TestRunner;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.assertThat;
+import static org.wikipedia.json.GsonMarshaller.marshal;
+import static org.wikipedia.json.GsonUnmarshaller.unmarshal;
+
+@RunWith(TestRunner.class)
+public class RequiredFieldsCheckOnReadTypeAdapterFactoryTest {
+    private final Gson gson = 
GsonUtil.getDefaultGsonBuilder().serializeNulls().create();
+
+    @Test
+    public void testRequireNonNull() {
+        RequiredModel expected = new RequiredModel();
+        expected.field = 1;
+        RequiredModel result = unmarshal(gson, RequiredModel.class, 
marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testRequireNull() {
+        RequiredModel model = new RequiredModel();
+        RequiredModel result = unmarshal(gson, RequiredModel.class, 
marshal(gson, model));
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testRequireMissing() {
+        RequiredModel result = unmarshal(gson, RequiredModel.class, "{}");
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testOptionalNonNull() {
+        OptionalModel expected = new OptionalModel();
+        expected.field = 1;
+        OptionalModel result = unmarshal(gson, OptionalModel.class, 
marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testOptionalNull() {
+        OptionalModel expected = new OptionalModel();
+        OptionalModel result = unmarshal(gson, OptionalModel.class, 
marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testOptionalMissing() {
+        OptionalModel expected = new OptionalModel();
+        OptionalModel result = unmarshal(gson, OptionalModel.class, "{}");
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testRequiredTypeAdapterNonNull() {
+        RequiredTypeAdapterModel expected = new RequiredTypeAdapterModel();
+        expected.uri = Uri.parse(Constants.WIKIPEDIA_URL);
+        RequiredTypeAdapterModel result = unmarshal(gson, 
RequiredTypeAdapterModel.class, marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testRequiredTypeAdapterNull() {
+        RequiredTypeAdapterModel expected = new RequiredTypeAdapterModel();
+        RequiredTypeAdapterModel result = unmarshal(gson, 
RequiredTypeAdapterModel.class, marshal(gson, expected));
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testRequiredTypeAdapterMissing() {
+        RequiredTypeAdapterModel result = unmarshal(gson, 
RequiredTypeAdapterModel.class, "{}");
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testOptionalTypeAdapterNonNull() {
+        OptionalTypeAdapterModel expected = new OptionalTypeAdapterModel();
+        expected.uri = Uri.parse(Constants.WIKIPEDIA_URL);
+        OptionalTypeAdapterModel result = unmarshal(gson, 
OptionalTypeAdapterModel.class, marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testOptionalTypeAdapterNull() {
+        OptionalTypeAdapterModel expected = new OptionalTypeAdapterModel();
+        OptionalTypeAdapterModel result = unmarshal(gson, 
OptionalTypeAdapterModel.class, marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testOptionalTypeAdapterMissing() {
+        OptionalTypeAdapterModel expected = new OptionalTypeAdapterModel();
+        OptionalTypeAdapterModel result = unmarshal(gson, 
OptionalTypeAdapterModel.class, "{}");
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testRequiredSerializedNameNonNull() {
+        SerializedNameModel expected = new SerializedNameModel();
+        expected.bar = "hello world";
+        SerializedNameModel result = unmarshal(gson, 
SerializedNameModel.class, marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testRequiredSerializedNameNull() {
+        SerializedNameModel expected = new SerializedNameModel();
+        SerializedNameModel result = unmarshal(gson, 
SerializedNameModel.class, marshal(gson, expected));
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testRequiredSerializedNameMissing() {
+        SerializedNameModel result = unmarshal(gson, 
SerializedNameModel.class, "{}");
+        assertThat(result, nullValue());
+    }
+
+    @Test
+    public void testComposedValid() {
+        RequiredModel required = new RequiredModel();
+        required.field = 1;
+        OptionalModel optional = new OptionalModel();
+        ComposedModel expected = new ComposedModel();
+        expected.required = required;
+        expected.optional = optional;
+
+        ComposedModel result = unmarshal(gson, ComposedModel.class, 
marshal(gson, expected));
+        assertThat(result, is(expected));
+    }
+
+    @Test
+    public void testComposedInvalid() {
+        RequiredModel required = new RequiredModel();
+        OptionalModel optional = new OptionalModel();
+        ComposedModel aggregated = new ComposedModel();
+        aggregated.required = required;
+        aggregated.optional = optional;
+
+        ComposedModel result = unmarshal(gson, ComposedModel.class, 
marshal(gson, aggregated));
+        assertThat(result, nullValue());
+    }
+
+    private static class RequiredModel extends BaseModel {
+        @SuppressWarnings("NullableProblems") @Required @NonNull private 
Integer field;
+    }
+
+    private static class OptionalModel extends BaseModel {
+        @Nullable private Integer field;
+    }
+
+    private static class ComposedModel extends BaseModel {
+        @SuppressWarnings("NullableProblems") @Required @NonNull private 
RequiredModel required;
+        @Nullable private OptionalModel optional;
+    }
+
+    private static class RequiredTypeAdapterModel extends BaseModel {
+        @SuppressWarnings("NullableProblems") @Required @NonNull private Uri 
uri;
+    }
+
+    private static class OptionalTypeAdapterModel extends BaseModel {
+        @Nullable private Uri uri;
+    }
+
+    private static class SerializedNameModel extends BaseModel {
+        @SuppressWarnings("NullableProblems") @SerializedName("foo") @Required 
@NonNull private String bar;
+    }
+}

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I2f5add17352ae234ea860be1c7f291909eced67d
Gerrit-PatchSet: 5
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to