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;
@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) {
import com.google.gwt.query.client.builders.Name;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
int getAge();
String getName();
+ List<String> getPhones();
GAddress address();
}
+ " 'email': 'foo@bar.com', "
+ " 'age': 27, "
+ " 'name': 'Foo Bar', "
+ + " 'phones': [ "
+ + " '9166566',"
+ + " '65443333'"
+ + " ],"
+ " 'address': {"
+ " 'street': 'Street Foo N6', "
- + " 'phone': '670'"
+ + " 'number': '670'"
+ " }"
+ "}";
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
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