summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2017-06-08 12:11:29 -0400
committerAustin Kirk <askirk@umich.edu>2017-06-08 12:11:29 -0400
commit12b978e9801f08320a2cc200456165a775da9fcc (patch)
treef8404a72b1ba755b06dea6407b200ff8ffcc7dee
parentec7599a16b0b05fb61668b877a218cb124cd3145 (diff)
downloadsdl_android-12b978e9801f08320a2cc200456165a775da9fcc.tar.gz
Fixing getLong in RPCStruct and adding unit tests for RPCMessage and RPCStruct
- Fixing getLong in RPCStruct and Adding Javadocs - Adding unit tests for RPCMessage and RPCStruct
-rw-r--r--sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCMessageTests.java138
-rw-r--r--sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCStructTests.java140
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/RPCStruct.java25
3 files changed, 301 insertions, 2 deletions
diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCMessageTests.java b/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCMessageTests.java
new file mode 100644
index 000000000..e446b0d9d
--- /dev/null
+++ b/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCMessageTests.java
@@ -0,0 +1,138 @@
+package com.smartdevicelink.test.proxy;
+
+import com.smartdevicelink.proxy.RPCMessage;
+import com.smartdevicelink.proxy.rpc.Alert;
+import com.smartdevicelink.proxy.rpc.ChangeRegistration;
+import com.smartdevicelink.proxy.rpc.Choice;
+import com.smartdevicelink.proxy.rpc.DisplayCapabilities;
+import com.smartdevicelink.proxy.rpc.GetDTCsResponse;
+import com.smartdevicelink.proxy.rpc.Image;
+import com.smartdevicelink.proxy.rpc.TTSChunk;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat;
+import com.smartdevicelink.test.Test;
+import com.smartdevicelink.test.Validator;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Created by austinkirk on 6/8/17.
+ */
+
+public class RPCMessageTests extends TestCase {
+ RPCMessage testMessage = new RPCMessage("TestFunction");
+
+ private static final String TAG = "RPC Struct Tests";
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testGeneralGettersAndSetters(){
+ String testKey = Test.GENERAL_STRING;
+ Integer testInt = Test.GENERAL_INT;
+
+ testMessage.setParameters(testKey, testInt);
+ assertEquals(Test.MATCH, testInt, testMessage.getParameters(testKey));
+
+ testMessage.setParameters(testKey, null);
+ assertNull(testMessage.getParameters(testKey));
+ }
+
+ public void testCommonObjectGetters(){
+ String stringKey = "String";
+ String testString = Test.GENERAL_STRING;
+ testMessage.setParameters(stringKey, testString);
+
+ assertEquals(Test.MATCH, testMessage.getString(stringKey), testString);
+
+ String intKey = "Integer";
+ Integer testInt = Test.GENERAL_INT;
+ testMessage.setParameters(intKey, testInt);
+
+ assertEquals(Test.MATCH, testMessage.getInteger(intKey), testInt);
+
+ String doubleKey = "Double";
+ Double testDouble = Test.GENERAL_DOUBLE;
+ testMessage.setParameters(doubleKey, testDouble);
+
+ assertEquals(Test.MATCH, testMessage.getDouble(doubleKey), testDouble);
+
+ String booleanKey = "Boolean";
+ Boolean testBoolean = Test.GENERAL_BOOLEAN;
+ testMessage.setParameters(booleanKey, testBoolean);
+
+ assertEquals(Test.MATCH, testMessage.getBoolean(booleanKey), testBoolean);
+
+ String longKey = "Long";
+ Long testLong = Test.GENERAL_LONG;
+ testMessage.setParameters(longKey, testLong);
+
+ assertEquals(Test.MATCH, testMessage.getLong(longKey), testLong);
+
+ testMessage.setParameters(longKey, testInt);
+
+ assertEquals(Test.MATCH, testMessage.getLong(longKey), new Long(testInt.longValue()));
+ }
+
+ public void testGetObject(){
+ String keyIsEmpty = "EMPTY";
+ assertNull(testMessage.getObject(Integer.class, keyIsEmpty));
+
+ String keyLanguage = ChangeRegistration.KEY_LANGUAGE;
+ Language language = Test.GENERAL_LANGUAGE;
+ testMessage.setParameters(keyLanguage, language);
+ assertEquals(Test.MATCH, language, testMessage.getObject(Language.class, keyLanguage));
+
+ String languageString = language.toString();
+ testMessage.setParameters(keyLanguage, languageString);
+ assertEquals(Test.MATCH, language, testMessage.getObject(Language.class, keyLanguage));
+
+ String keyImage = Choice.KEY_IMAGE;
+ Image testImage = Test.GENERAL_IMAGE;
+ testMessage.setParameters(keyImage, testImage.getStore());
+ assertTrue(Validator.validateImage(testImage, (Image) testMessage.getObject(Image.class, keyImage)));
+
+ String keyDTCs = GetDTCsResponse.KEY_DTC;
+ List<String> testDTCs = Test.GENERAL_STRING_LIST;
+ testMessage.setParameters(keyDTCs, testDTCs);
+ assertEquals(Test.MATCH, testDTCs, testMessage.getObject(String.class, keyDTCs));
+
+ String keyTTSchunks = Alert.KEY_TTS_CHUNKS;
+ List<TTSChunk> testTTSchunks = Test.GENERAL_TTSCHUNK_LIST;
+ testMessage.setParameters(keyTTSchunks, testTTSchunks);
+ assertEquals(Test.MATCH, testTTSchunks, testMessage.getObject(TTSChunk.class, keyTTSchunks));
+
+ List<Hashtable<String, Object>> testListTTSchunks = new ArrayList<>();
+ for(TTSChunk ttsChunk : testTTSchunks){
+ testListTTSchunks.add(ttsChunk.getStore());
+ }
+ testMessage.setParameters(keyTTSchunks, testListTTSchunks);
+ List<TTSChunk> underTest = (List<TTSChunk>) testMessage.getObject(TTSChunk.class, keyTTSchunks);
+ assertTrue(Validator.validateTtsChunks(testTTSchunks, underTest));
+
+ String keyMediaClockFormats = DisplayCapabilities.KEY_MEDIA_CLOCK_FORMATS;
+ List<MediaClockFormat> testMediaClockFormats = Test.GENERAL_MEDIACLOCKFORMAT_LIST;
+ testMessage.setParameters(keyMediaClockFormats, testMediaClockFormats);
+ assertEquals(Test.MATCH, testMediaClockFormats, testMessage.getObject(MediaClockFormat.class, keyMediaClockFormats));
+
+ List<String> testListMediaClockFormats = new ArrayList<>();
+ for(MediaClockFormat mcFormat : testMediaClockFormats){
+ testListMediaClockFormats.add(mcFormat.toString());
+ }
+ testMessage.setParameters(keyMediaClockFormats, testListMediaClockFormats);
+ assertEquals(Test.MATCH, testMediaClockFormats, testMessage.getObject(MediaClockFormat.class, keyMediaClockFormats));
+
+ assertNull(testMessage.getObject(Image.class, keyLanguage)); // Test incorrect class
+ }
+}
diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCStructTests.java b/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCStructTests.java
new file mode 100644
index 000000000..1dce94eb7
--- /dev/null
+++ b/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/RPCStructTests.java
@@ -0,0 +1,140 @@
+package com.smartdevicelink.test.proxy;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.AirbagStatus;
+import com.smartdevicelink.proxy.rpc.Choice;
+import com.smartdevicelink.proxy.rpc.DisplayCapabilities;
+import com.smartdevicelink.proxy.rpc.Image;
+import com.smartdevicelink.proxy.rpc.ImageField;
+import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+import com.smartdevicelink.test.Test;
+import com.smartdevicelink.test.Validator;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Created by austinkirk on 6/8/17.
+ */
+
+public class RPCStructTests extends TestCase {
+ RPCStruct testStruct = new RPCStruct();
+
+ private static final String TAG = "RPC Struct Tests";
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testGeneralGettersAndSetters(){
+ String testKey = Test.GENERAL_STRING;
+ Integer testInt = Test.GENERAL_INT;
+
+ testStruct.setValue(testKey, testInt);
+ assertEquals(Test.MATCH, testInt, testStruct.getValue(testKey));
+
+ testStruct.setValue(testKey, null);
+ assertNull(testStruct.getValue(testKey));
+ }
+
+ public void testCommonObjectGetters(){
+ String stringKey = "String";
+ String testString = Test.GENERAL_STRING;
+ testStruct.setValue(stringKey, testString);
+
+ assertEquals(Test.MATCH, testStruct.getString(stringKey), testString);
+
+ String intKey = "Integer";
+ Integer testInt = Test.GENERAL_INT;
+ testStruct.setValue(intKey, testInt);
+
+ assertEquals(Test.MATCH, testStruct.getInteger(intKey), testInt);
+
+ String doubleKey = "Double";
+ Double testDouble = Test.GENERAL_DOUBLE;
+ testStruct.setValue(doubleKey, testDouble);
+
+ assertEquals(Test.MATCH, testStruct.getDouble(doubleKey), testDouble);
+
+ String booleanKey = "Boolean";
+ Boolean testBoolean = Test.GENERAL_BOOLEAN;
+ testStruct.setValue(booleanKey, testBoolean);
+
+ assertEquals(Test.MATCH, testStruct.getBoolean(booleanKey), testBoolean);
+
+ String longKey = "Long";
+ Long testLong = Test.GENERAL_LONG;
+ testStruct.setValue(longKey, testLong);
+
+ assertEquals(Test.MATCH, testStruct.getLong(longKey), testLong);
+
+ testStruct.setValue(longKey, testInt);
+
+ assertEquals(Test.MATCH, testStruct.getLong(longKey), new Long(testInt.longValue()));
+ }
+
+ public void testGetObject(){
+ String keyIsEmpty = "EMPTY";
+ assertNull(testStruct.getObject(Integer.class, keyIsEmpty));
+
+ String keyAirbag = AirbagStatus.KEY_DRIVER_AIRBAG_DEPLOYED;
+ VehicleDataEventStatus eventStatus = VehicleDataEventStatus.FAULT;
+ testStruct.setValue(keyAirbag, eventStatus);
+ assertEquals(Test.MATCH, eventStatus, testStruct.getObject(VehicleDataEventStatus.class, keyAirbag));
+
+ String eventStatusString = VehicleDataEventStatus.FAULT.toString();
+ testStruct.setValue(keyAirbag, eventStatusString);
+ assertEquals(Test.MATCH, eventStatus, testStruct.getObject(VehicleDataEventStatus.class, keyAirbag));
+
+ String keyImage = Choice.KEY_IMAGE;
+ Image testImage = Test.GENERAL_IMAGE;
+ testStruct.setValue(keyImage, testImage.getStore());
+ assertTrue(Validator.validateImage(testImage, (Image) testStruct.getObject(Image.class, keyImage)));
+
+ String keyVrCommand = Choice.KEY_VR_COMMANDS;
+ List<String> testCommands = Test.GENERAL_STRING_LIST;
+ testStruct.setValue(keyVrCommand, testCommands);
+ assertEquals(Test.MATCH, testCommands, testStruct.getObject(String.class, keyVrCommand));
+
+ String keyImageFields = DisplayCapabilities.KEY_IMAGE_FIELDS;
+ List<ImageField> testImageFields = Test.GENERAL_IMAGEFIELD_LIST;
+ testStruct.setValue(keyImageFields, testImageFields);
+ assertEquals(Test.MATCH, testImageFields, testStruct.getObject(ImageField.class, keyImageFields));
+
+ List<Hashtable<String, Object>> testListImageFields = new ArrayList<>();
+ for(ImageField imgField : testImageFields){
+ testListImageFields.add(imgField.getStore());
+ }
+ testStruct.setValue(keyImageFields, testListImageFields);
+ List<ImageField> underTest = (List<ImageField>) testStruct.getObject(ImageField.class, keyImageFields);
+ int index = 0;
+ for(ImageField imgField : testImageFields){
+ assertTrue(Validator.validateImageFields(imgField, underTest.get(index++)));
+ }
+
+ String keyMediaClockFormats = DisplayCapabilities.KEY_MEDIA_CLOCK_FORMATS;
+ List<MediaClockFormat> testMediaClockFormats = Test.GENERAL_MEDIACLOCKFORMAT_LIST;
+ testStruct.setValue(keyMediaClockFormats, testMediaClockFormats);
+ assertEquals(Test.MATCH, testMediaClockFormats, testStruct.getObject(MediaClockFormat.class, keyMediaClockFormats));
+
+ List<String> testListMediaClockFormats = new ArrayList<>();
+ for(MediaClockFormat mcFormat : testMediaClockFormats){
+ testListMediaClockFormats.add(mcFormat.toString());
+ }
+ testStruct.setValue(keyMediaClockFormats, testListMediaClockFormats);
+ assertEquals(Test.MATCH, testMediaClockFormats, testStruct.getObject(MediaClockFormat.class, keyMediaClockFormats));
+
+ assertNull(testStruct.getObject(Image.class, keyAirbag)); // Test incorrect class
+ }
+}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/RPCStruct.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
index 18561ea68..7d3640c32 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/RPCStruct.java
@@ -137,6 +137,15 @@ public class RPCStruct {
// Helper methods
+ /**
+ * @param tClass a Class to cast Objects to
+ * @param obj Object returned from a stored hashtable
+ * @return A null object if obj is null or if none of the following is true:
+ * a) obj is an instance of tClass
+ * b) obj is an instance of String and it tClass has a valid `valueForString` method
+ * c) obj is an instance of a Hashtable
+ * d) obj is an instance of a List
+ */
protected Object formatObject(Class tClass, Object obj){
if(obj == null){
return null;
@@ -183,6 +192,11 @@ public class RPCStruct {
return null;
}
+ /**
+ * @param tClass - a Class with a `valueForString(String s)` method that returns an Object for a given String
+ * @param s - a String to be converted to an Object using a `valueForString(String s)` method
+ * @return An Object converted using a `valueForString(String s)` method in the Class passed in, or a null object if such method does not exist
+ */
protected Object getValueForString(Class tClass, String s){
Method valueForString = null;
try {
@@ -204,7 +218,6 @@ public class RPCStruct {
}
// Common Object Getters
-
public String getString(String key) {
return (String) store.get(key);
}
@@ -219,5 +232,13 @@ public class RPCStruct {
public Boolean getBoolean(String key) { return (Boolean) store.get(key); }
- public Long getLong(String key){ return (Long) store.get(key); }
+ public Long getLong(String key){
+ Object result = store.get(key);
+ if (result instanceof Integer) {
+ return ((Integer) result).longValue();
+ }else if(result instanceof Long){
+ return (Long) result;
+ }
+ return null;
+ }
}