Browse Source

Merge pull request #356 from apanizo/master

Data binding over list attributes
tags/gwtquery-project-1.5-beta1
Julien Dramaix 8 years ago
parent
commit
b1728c2e9d

+ 7
- 1
gwtquery-core/src/main/java/com/google/gwt/query/vm/JsonBuilderHandler.java View File

@@ -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) {

+ 40
- 2
gwtquery-core/src/test/java/com/google/gwt/query/client/dbinding/DataBindingTestJre.java View File

@@ -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);
}
}

Loading…
Cancel
Save