diff options
author | apanizo <adolfo.panizo@gmail.com> | 2015-05-26 14:03:20 +0200 |
---|---|---|
committer | apanizo <adolfo.panizo@gmail.com> | 2015-05-26 14:03:20 +0200 |
commit | 9cf3566409ab957139fd6cff2d9b3ea850dab7d1 (patch) | |
tree | efc69be034e3419821f0d736ab308149b1985ffe | |
parent | 0b4ca15d994c78cc38e35cbe691f02b73f1fb54b (diff) | |
download | gwtquery-9cf3566409ab957139fd6cff2d9b3ea850dab7d1.tar.gz gwtquery-9cf3566409ab957139fd6cff2d9b3ea850dab7d1.zip |
When doing data binding over a list attribute, return an empty list or
null accordingly.
-rw-r--r-- | gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java | 8 | ||||
-rw-r--r-- | gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java | 42 |
2 files changed, 47 insertions, 3 deletions
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java b/gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java index adbdd233..395a38a3 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java @@ -29,6 +29,7 @@ import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Hashtable; @@ -66,11 +67,16 @@ public class JsonBuilderHandler implements InvocationHandler { @SuppressWarnings("unchecked") private <T> Object jsonArrayToList(JsonArray j, Class<T> ctype, boolean isArray) { + if (j == null) { + return null; + } + List<T> l = new ArrayList<T>(); for (int i = 0; j != null && i < j.length(); i++) { l.add((T) getValue(j, i, null, null, ctype, null)); } - return l.isEmpty() ? null : isArray ? l.toArray((T[]) Array.newInstance(ctype, l.size())) : l; + + return l.isEmpty() ? Collections.emptyList() : isArray ? l.toArray((T[]) Array.newInstance(ctype, l.size())) : l; } private Double toDouble(String attr, JsonArray arr, int idx, JsonObject obj) { diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java index 50123b80..f276f034 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java @@ -26,6 +26,7 @@ import com.google.gwt.query.client.builders.JsonBuilder; import com.google.gwt.query.client.builders.Name; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -165,6 +166,7 @@ public class DataBindingTestJre extends GWTTestCase { int getAge(); String getName(); + List<String> getPhones(); GAddress address(); } @@ -173,9 +175,13 @@ public class DataBindingTestJre extends GWTTestCase { + " 'email': 'foo@bar.com', " + " 'age': 27, " + " 'name': 'Foo Bar', " + + " 'phones': [ " + + " '9166566'," + + " '65443333'" + + " ]," + " 'address': {" + " 'street': 'Street Foo N6', " - + " 'phone': '670'" + + " 'number': '670'" + " }" + "}"; @@ -189,7 +195,7 @@ public class DataBindingTestJre extends GWTTestCase { assertEquals("Foo Bar", entity.getName()); assertNotNull(entity.address()); assertEquals("Street Foo N6", entity.address().street()); - assertNotNull(entity.address().get("phone")); + assertNotNull(entity.address().get("number")); } // Nested strict not implemented in JS @@ -211,4 +217,36 @@ public class DataBindingTestJre extends GWTTestCase { assertNull(entity.address().get("phone")); } } + + public void test_return_empty_list_when_array_isEmpty() { + //GIVEN a JSON representation of a user without phones + GUser user = GQ.create(GUser.class); + user.set("email", "a@b.com"); + user.set("name", "Random Name"); + user.set("phones", Collections.emptyList()); + String json = user.toJson(); + + //WHEN fetching that user + GUser retrievedUser = GQ.create(GUser.class); + retrievedUser.parse(json, true); + + //THEN + assertEquals(0, retrievedUser.getPhones().size()); + } + + public void test_return_null_when_list_is_not_specified() { + //GIVEN a JSON representation of a user + GUser user = GQ.create(GUser.class); + user.set("email", "a@b.com"); + user.set("name", "Random Name"); + String json = user.toJson(); + + //WHEN fetching that user + GUser retrievedUser = GQ.create(GUser.class); + retrievedUser.parse(json, true); + + //THEN + List<String> phones = retrievedUser.getPhones(); + assertNull(phones); + } }
\ No newline at end of file |