summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilal Alsharifi <599206+bilal-alsharifi@users.noreply.github.com>2020-09-02 10:19:52 -0400
committerGitHub <noreply@github.com>2020-09-02 10:19:52 -0400
commita4539e37619775ee028fbb4fc8b766904bdba1ed (patch)
treef9970956b6701b394eb25a18efd05b403bf9a0b0
parent30e11caebce4986594f3267984e2d6d8ead09bce (diff)
parent2322f536be99597296b1c9dd85c9392c1f8ef9bc (diff)
downloadsdl_android-a4539e37619775ee028fbb4fc8b766904bdba1ed.tar.gz
Merge pull request #1474 from smartdevicelink/bugfix/issue_1473
Fix Issue 1473 - Null items as head or empty lists
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/RPCStructTests.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java18
2 files changed, 64 insertions, 2 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/RPCStructTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/RPCStructTests.java
new file mode 100644
index 000000000..970c3c8ba
--- /dev/null
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/RPCStructTests.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.test.rpc;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static junit.framework.TestCase.assertNotNull;
+
+@RunWith(AndroidJUnit4.class)
+public class RPCStructTests {
+
+ @Test
+ public void testFormatObject() {
+ final String KEY = "LIST";
+ RPCStruct struct = new RPCStruct();
+ List<RPCStruct> structs = new ArrayList<>();
+ struct.setValue(KEY, structs);
+ assertNotNull(struct.getObject(RPCStruct.class, KEY));
+
+ structs.add(new RPCStruct());
+ struct.setValue(KEY, structs);
+ assertNotNull(struct.getObject(RPCStruct.class, KEY));
+
+ structs.clear();
+ structs.add(null);
+ struct.setValue(KEY, structs);
+ assertNotNull(struct.getObject(RPCStruct.class, KEY));
+
+ structs.clear();
+ structs.add(null);
+ structs.add(new RPCStruct());
+ struct.setValue(KEY, structs);
+ assertNotNull(struct.getObject(RPCStruct.class, KEY));
+
+ structs.clear();
+ structs.add(new RPCStruct());
+ structs.add(null);
+ structs.add(new RPCStruct());
+ struct.setValue(KEY, structs);
+ assertNotNull(struct.getObject(RPCStruct.class, KEY));
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java b/base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
index 5eb293ba2..402866291 100644
--- a/base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
+++ b/base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
@@ -275,8 +275,18 @@ public class RPCStruct {
} else if (obj instanceof List<?>) {
List<?> list = (List<?>) obj;
if (list != null && list.size() > 0) {
- Object item = list.get(0);
- if (tClass.isInstance(item)) {
+ Object item = null;
+ //Iterate through list to find first non-null object
+ for(Object object: list){
+ if(object != null) {
+ item = object;
+ break;
+ }
+ }
+
+ if (item == null) {
+ return list;
+ } else if (tClass.isInstance(item)) {
return list;
} else if (item instanceof Hashtable) {
List<Object> newList = new ArrayList<Object>();
@@ -307,6 +317,10 @@ public class RPCStruct {
}
return newList;
}
+ } else {
+ //If the list is either null or empty it should be returned. It will keep the same
+ //behavior as it does today with null lists, but empty ones will now also be returned.
+ return list;
}
}
return null;