diff options
author | Joey Grover <joeygrover@gmail.com> | 2020-09-01 16:08:06 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2020-09-01 16:08:06 -0400 |
commit | 2322f536be99597296b1c9dd85c9392c1f8ef9bc (patch) | |
tree | f9970956b6701b394eb25a18efd05b403bf9a0b0 | |
parent | 30e11caebce4986594f3267984e2d6d8ead09bce (diff) | |
download | sdl_android-bugfix/issue_1473.tar.gz |
Fix formatObject method to handle null valuesbugfix/issue_1473
-rw-r--r-- | android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/RPCStructTests.java | 48 | ||||
-rw-r--r-- | base/src/main/java/com/smartdevicelink/proxy/RPCStruct.java | 18 |
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;
|