diff options
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;
+ }
}
|