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