diff options
author | Austin Kirk <askirk@umich.edu> | 2018-07-20 11:22:09 -0400 |
---|---|---|
committer | Austin Kirk <askirk@umich.edu> | 2018-07-20 11:22:09 -0400 |
commit | 74f7fed2a4e93f877f8eda4c8e7107616283dbb6 (patch) | |
tree | 52be3ce5c384e8379abd14d19c443495b54e9265 | |
parent | 09a1efa67168341b9fa3a20663272d9a3744d77e (diff) | |
download | sdl_android-74f7fed2a4e93f877f8eda4c8e7107616283dbb6.tar.gz |
Add javadocs and modify tests to use Mockito
- Added javadocs to all public methods in FileManager
- Refactored tests to use Mockito apis, shrinking overhead and imports
3 files changed, 344 insertions, 347 deletions
diff --git a/sdl_android/build.gradle b/sdl_android/build.gradle index fc29f66ff..d8cdb8baf 100644 --- a/sdl_android/build.gradle +++ b/sdl_android/build.gradle @@ -40,6 +40,7 @@ dependencies { }) testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.9.0' + androidTestImplementation 'org.mockito:mockito-android:2.9.0' api 'com.android.support:support-annotations:27.1.1' } diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java b/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java index 6ca39ae37..f6344a44c 100644 --- a/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java +++ b/sdl_android/src/androidTest/java/com/smartdevicelink/api/FileManagerTests.java @@ -4,41 +4,27 @@ import android.content.Context; import android.net.Uri; import android.test.AndroidTestCase; -import com.smartdevicelink.protocol.enums.FunctionID; -import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.proxy.RPCRequest; -import com.smartdevicelink.proxy.interfaces.IAudioStreamListener; import com.smartdevicelink.proxy.interfaces.ISdl; -import com.smartdevicelink.proxy.interfaces.ISdlServiceListener; -import com.smartdevicelink.proxy.interfaces.IVideoStreamListener; -import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; import com.smartdevicelink.proxy.rpc.ListFiles; import com.smartdevicelink.proxy.rpc.ListFilesResponse; import com.smartdevicelink.proxy.rpc.PutFile; import com.smartdevicelink.proxy.rpc.PutFileResponse; -import com.smartdevicelink.proxy.rpc.SdlMsgVersion; -import com.smartdevicelink.proxy.rpc.TemplateColorScheme; -import com.smartdevicelink.proxy.rpc.enums.AppHMIType; import com.smartdevicelink.proxy.rpc.enums.FileType; -import com.smartdevicelink.proxy.rpc.enums.Language; import com.smartdevicelink.proxy.rpc.enums.Result; -import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener; -import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; -import com.smartdevicelink.streaming.audio.AudioStreamingCodec; -import com.smartdevicelink.streaming.audio.AudioStreamingParams; -import com.smartdevicelink.streaming.video.VideoStreamingParameters; import com.smartdevicelink.test.Test; -import com.smartdevicelink.transport.BaseTransportConfig; -import com.smartdevicelink.transport.TCPTransportConfig; -import java.net.URI; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Vector; -import static com.smartdevicelink.api.SdlManagerTests.transport; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; /** * This is a unit test class for the SmartDeviceLink library manager class : @@ -50,70 +36,27 @@ public class FileManagerTests extends AndroidTestCase { private Context mTestContext; private SdlFile validFile; - protected class BaseISdl implements ISdl{ - @Override - public void start() { - - } - - @Override - public void stop() { - - } - - @Override - public boolean isConnected() { - return false; - } - - @Override - public void addServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) { - - } - - @Override - public void removeServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) { - - } - - @Override - public void startVideoService(VideoStreamingParameters parameters, boolean encrypted) { - - } - - @Override - public void stopVideoService() { - - } - - @Override - public IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters) { - return null; - } - - @Override - public void startAudioService(boolean encrypted, AudioStreamingCodec codec, AudioStreamingParams params) { - - } - - @Override - public void startAudioService(boolean encrypted) { - - } - - @Override - public void stopAudioService() { + // SETUP / HELPERS - } + @Override + public void setUp() throws Exception{ + super.setUp(); + mTestContext = this.getContext(); + validFile = new SdlFile(); + validFile.setName(Test.GENERAL_STRING); + validFile.setFileData(Test.GENERAL_BYTE_ARRAY); + } - @Override - public IAudioStreamListener startAudioStream(boolean isEncrypted, AudioStreamingCodec codec, AudioStreamingParams params) { - return null; - } + @Override + public void tearDown() throws Exception { + super.tearDown(); + } + private Answer<Void> onListFilesSuccess = new Answer<Void>() { @Override - public void sendRPCRequest(RPCRequest message) { - // Allow for successful initialization by default + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + RPCRequest message = (RPCRequest) args[0]; if(message instanceof ListFiles){ int correlationId = message.getCorrelationID(); ListFilesResponse listFilesResponse = new ListFilesResponse(); @@ -122,168 +65,185 @@ public class FileManagerTests extends AndroidTestCase { listFilesResponse.setSuccess(true); message.getOnRPCResponseListener().onResponse(correlationId, listFilesResponse); } + return null; } + }; + private Answer<Void> onListFilesFailure = new Answer<Void>() { @Override - public void sendRequests(List<? extends RPCRequest> rpcs, OnMultipleRequestListener listener) { - - } - - @Override - public void addOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) { - - } - - @Override - public boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) { - return false; - } - - @Override - public Object getCapability(SystemCapabilityType systemCapabilityType) { + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + RPCRequest message = (RPCRequest) args[0]; + if(message instanceof ListFiles){ + int correlationId = message.getCorrelationID(); + ListFilesResponse listFilesResponse = new ListFilesResponse(); + listFilesResponse.setSuccess(false); + message.getOnRPCResponseListener().onResponse(correlationId, listFilesResponse); + } return null; } + }; + private Answer<Void> onPutFileSuccess = new Answer<Void>() { @Override - public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) { - + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + RPCRequest message = (RPCRequest) args[0]; + if(message instanceof PutFile){ + int correlationId = message.getCorrelationID(); + PutFileResponse putFileResponse = new PutFileResponse(); + putFileResponse.setSuccess(true); + message.getOnRPCResponseListener().onResponse(correlationId, putFileResponse); + } + return null; } + }; + private Answer<Void> onPutFileFailure = new Answer<Void>() { @Override - public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType) { - return false; + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + RPCRequest message = (RPCRequest) args[0]; + if(message instanceof PutFile){ + int correlationId = message.getCorrelationID(); + PutFileResponse putFileResponse = new PutFileResponse(); + putFileResponse.setSuccess(false); + message.getOnRPCResponseListener().onResponse(correlationId, putFileResponse); + } + return null; } + }; + private Answer<Void> onSendRequestsSuccess = new Answer<Void>() { @Override - public SdlMsgVersion getSdlMsgVersion() { + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + List<RPCRequest> rpcs = (List<RPCRequest>) args[0]; + OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1]; + if(rpcs.get(0) instanceof PutFile){ + for(RPCRequest message : rpcs){ + int correlationId = message.getCorrelationID(); + listener.addCorrelationId(correlationId); + PutFileResponse putFileResponse = new PutFileResponse(); + putFileResponse.setSuccess(true); + listener.onResponse(correlationId, putFileResponse); + } + } return null; } }; - @Override - public void setUp() throws Exception{ - super.setUp(); - mTestContext = this.getContext(); - validFile = new SdlFile(); - validFile.setName(Test.GENERAL_STRING); - validFile.setFileData(Test.GENERAL_BYTE_ARRAY); - } - - @Override - public void tearDown() throws Exception { - super.tearDown(); - } - - // SETUP / HELPERS - - // TESTS public void testInitializationSuccess(){ - FileManager fileManager = new FileManager(new BaseISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); - assertEquals(fileManager.getState(), BaseSubManager.READY); - assertEquals(fileManager.getRemoteFileNames(), Test.GENERAL_STRING_LIST); + ISdl internalInterface = mock(ISdl.class); + + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + assertEquals(fileManager.getState(), BaseSubManager.READY); + assertEquals(fileManager.getRemoteFileNames(), Test.GENERAL_STRING_LIST); + } + }); } public void testInitializationFailure(){ - class TestISdl extends BaseISdl{ + ISdl internalInterface = mock(ISdl.class); + + doAnswer(onListFilesFailure).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { @Override - public void sendRPCRequest(RPCRequest message) { - if(message instanceof ListFiles){ - int correlationId = message.getCorrelationID(); - ListFilesResponse listFilesResponse = new ListFilesResponse(); - listFilesResponse.setSuccess(false); - message.getOnRPCResponseListener().onResponse(correlationId, listFilesResponse); - } + public void onComplete(boolean success) { + assertFalse(success); + assertEquals(fileManager.getState(), BaseSubManager.ERROR); } - } - - FileManager fileManager = new FileManager(new TestISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); - assertEquals(fileManager.getState(), BaseSubManager.ERROR); + }); } public void testFileUploadSuccess(){ - class TestISdl extends BaseISdl{ - @Override - public void sendRPCRequest(RPCRequest message) { - super.sendRPCRequest(message); - if(message instanceof PutFile){ - int correlationId = message.getCorrelationID(); - PutFileResponse putFileResponse = new PutFileResponse(); - putFileResponse.setSuccess(true); - message.getOnRPCResponseListener().onResponse(correlationId, putFileResponse); - } - } - } + ISdl internalInterface = mock(ISdl.class); - FileManager fileManager = new FileManager(new TestISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + doAnswer(onPutFileSuccess).when(internalInterface).sendRPCRequest(any(PutFile.class)); - fileManager.uploadFile(validFile, new CompletionListener() { + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { @Override public void onComplete(boolean success) { assertTrue(success); + fileManager.uploadFile(validFile, new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + assertTrue(fileManager.getRemoteFileNames().contains(validFile.getName())); + } + }); } }); - - assertTrue(fileManager.getRemoteFileNames().contains(validFile.getName())); } public void testFileUploadFailure(){ - class TestISdl extends BaseISdl{ - @Override - public void sendRPCRequest(RPCRequest message) { - super.sendRPCRequest(message); - if(message instanceof PutFile){ - int correlationId = message.getCorrelationID(); - PutFileResponse putFileResponse = new PutFileResponse(); - putFileResponse.setSuccess(false); - message.getOnRPCResponseListener().onResponse(correlationId, putFileResponse); - } - } - } + ISdl internalInterface = mock(ISdl.class); - FileManager fileManager = new FileManager(new BaseISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + doAnswer(onPutFileFailure).when(internalInterface).sendRPCRequest(any(PutFile.class)); - fileManager.uploadFile(validFile, new CompletionListener() { + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { @Override public void onComplete(boolean success) { - assertTrue(!success); + assertTrue(success); + fileManager.uploadFile(validFile, new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertFalse(success); + assertFalse(fileManager.getRemoteFileNames().contains(validFile.getName())); + } + }); } }); - - assertTrue(!fileManager.getRemoteFileNames().contains(validFile.getName())); } public void testInvalidSdlFileInput(){ - FileManager fileManager = new FileManager(new BaseISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); - - SdlFile sdlFile = new SdlFile(); - // Don't set name - sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); - checkForUploadFailure(fileManager, sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName(Test.GENERAL_STRING); - // Don't set data - checkForUploadFailure(fileManager, sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName(Test.GENERAL_STRING); - // Give an invalid resource ID - sdlFile.setResourceId(Test.GENERAL_INT); - checkForUploadFailure(fileManager, sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName(Test.GENERAL_STRING); - // Set invalid Uri - Uri testUri = Uri.parse("http://www.google.com"); - sdlFile.setUri(testUri); - checkForUploadFailure(fileManager, sdlFile); + ISdl internalInterface = mock(ISdl.class); + + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + SdlFile sdlFile = new SdlFile(); + // Don't set name + sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); + checkForUploadFailure(fileManager, sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName(Test.GENERAL_STRING); + // Don't set data + checkForUploadFailure(fileManager, sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName(Test.GENERAL_STRING); + // Give an invalid resource ID + sdlFile.setResourceId(Test.GENERAL_INT); + checkForUploadFailure(fileManager, sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName(Test.GENERAL_STRING); + // Set invalid Uri + Uri testUri = Uri.parse("http://www.google.com"); + sdlFile.setUri(testUri); + checkForUploadFailure(fileManager, sdlFile); + } + }); } private void checkForUploadFailure(FileManager fileManager, SdlFile sdlFile){ @@ -320,67 +280,65 @@ public class FileManagerTests extends AndroidTestCase { } public void testMultipleFileUploadSuccess(){ - class TestISdl extends BaseISdl{ - @Override - public void sendRequests(List<? extends RPCRequest> rpcs, OnMultipleRequestListener listener) { - super.sendRequests(rpcs, listener); - if(rpcs.get(0) instanceof PutFile){ - for(RPCRequest message : rpcs){ - int correlationId = message.getCorrelationID(); - listener.addCorrelationId(correlationId); - PutFileResponse putFileResponse = new PutFileResponse(); - putFileResponse.setSuccess(true); - listener.onResponse(correlationId, putFileResponse); - } - } - } - } + ISdl internalInterface = mock(ISdl.class); - FileManager fileManager = new FileManager(new TestISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); - - int fileNum = 1; - List<SdlFile> filesToUpload = new ArrayList<>(); - SdlFile sdlFile = new SdlFile(); - sdlFile.setName("file" + fileNum++); - Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); - sdlFile.setUri(uri); - filesToUpload.add(sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName("file" + fileNum++); - sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl); - filesToUpload.add(sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName("file" + fileNum++); - sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); - sdlFile.setPersistent(true); - sdlFile.setType(FileType.BINARY); - filesToUpload.add(sdlFile); - - fileManager.uploadFiles(filesToUpload, - new MultipleFileCompletionListener() { - @Override - public void onComplete(Map<String, String> errors) { - assertNull(errors); - } - }); + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + doAnswer(onSendRequestsSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); - List < String > uploadedFileNames = fileManager.getRemoteFileNames(); - for(SdlFile file : filesToUpload){ - assertTrue(uploadedFileNames.contains(file.getName())); - } + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + int fileNum = 1; + final List<SdlFile> filesToUpload = new ArrayList<>(); + SdlFile sdlFile = new SdlFile(); + sdlFile.setName("file" + fileNum++); + Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); + sdlFile.setUri(uri); + filesToUpload.add(sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName("file" + fileNum++); + sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl); + filesToUpload.add(sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName("file" + fileNum++); + sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); + sdlFile.setPersistent(true); + sdlFile.setType(FileType.BINARY); + filesToUpload.add(sdlFile); + + fileManager.uploadFiles(filesToUpload, + new MultipleFileCompletionListener() { + @Override + public void onComplete(Map<String, String> errors) { + assertNull(errors); + List < String > uploadedFileNames = fileManager.getRemoteFileNames(); + for(SdlFile file : filesToUpload){ + assertTrue(uploadedFileNames.contains(file.getName())); + } + } + }); + } + }); } public void testMultipleFileUploadPartialFailure(){ final String failureReason = "No space available"; - class TestISdl extends BaseISdl{ - private int responseNum = 0; + ISdl internalInterface = mock(ISdl.class); + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + + Answer<Void> onSendRequestsFailure = new Answer<Void>() { + private int responseNum = 0; @Override - public void sendRequests(List<? extends RPCRequest> rpcs, OnMultipleRequestListener listener) { + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + List<RPCRequest> rpcs = (List<RPCRequest>) args[0]; + OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1]; if(rpcs.get(0) instanceof PutFile){ for(RPCRequest message : rpcs){ int correlationId = message.getCorrelationID(); @@ -394,107 +352,104 @@ public class FileManagerTests extends AndroidTestCase { } } } + return null; } - } + }; + doAnswer(onSendRequestsFailure).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); - FileManager fileManager = new FileManager(new TestISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); - - final String baseFileName = "file"; - int fileNum = 0; - final List<SdlFile> filesToUpload = new ArrayList<>(); - SdlFile sdlFile = new SdlFile(); - sdlFile.setName(baseFileName + fileNum++); - Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); - sdlFile.setUri(uri); - filesToUpload.add(sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName(baseFileName + fileNum++); - sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl); - filesToUpload.add(sdlFile); - - sdlFile = new SdlFile(); - sdlFile.setName(baseFileName + fileNum++); - sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); - sdlFile.setPersistent(true); - sdlFile.setType(FileType.BINARY); - filesToUpload.add(sdlFile); - - fileManager.uploadFiles(filesToUpload, - new MultipleFileCompletionListener() { - @Override - public void onComplete(Map<String, String> errors) { - assertNotNull(errors); - for(int i = 0; i < filesToUpload.size(); i++){ - if(i % 2 == 0){ - assertTrue(errors.containsKey(filesToUpload.get(i).getName())); - assertEquals(FileManager.buildErrorString(Result.OUT_OF_MEMORY, - failureReason), errors.get(filesToUpload.get(i).getName())); - }else{ - assertFalse(errors.containsKey(filesToUpload.get(i).getName())); + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + final String baseFileName = "file"; + int fileNum = 0; + final List<SdlFile> filesToUpload = new ArrayList<>(); + SdlFile sdlFile = new SdlFile(); + sdlFile.setName(baseFileName + fileNum++); + Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); + sdlFile.setUri(uri); + filesToUpload.add(sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName(baseFileName + fileNum++); + sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl); + filesToUpload.add(sdlFile); + + sdlFile = new SdlFile(); + sdlFile.setName(baseFileName + fileNum++); + sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY); + sdlFile.setPersistent(true); + sdlFile.setType(FileType.BINARY); + filesToUpload.add(sdlFile); + + fileManager.uploadFiles(filesToUpload, + new MultipleFileCompletionListener() { + @Override + public void onComplete(Map<String, String> errors) { + assertNotNull(errors); + for(int i = 0; i < filesToUpload.size(); i++){ + if(i % 2 == 0){ + assertTrue(errors.containsKey(filesToUpload.get(i).getName())); + assertEquals(FileManager.buildErrorString(Result.OUT_OF_MEMORY, + failureReason), errors.get(filesToUpload.get(i).getName())); + }else{ + assertFalse(errors.containsKey(filesToUpload.get(i).getName())); + } + } + List <String> uploadedFileNames = fileManager.getRemoteFileNames(); + for(int i = 0; i < filesToUpload.size(); i++){ + if(i % 2 == 0){ + assertFalse(uploadedFileNames.contains(filesToUpload.get(i).getName())); + }else{ + assertTrue(uploadedFileNames.contains(filesToUpload.get(i).getName())); + } + } } - } - } - }); - - List <String> uploadedFileNames = fileManager.getRemoteFileNames(); - for(int i = 0; i < filesToUpload.size(); i++){ - if(i % 2 == 0){ - assertFalse(uploadedFileNames.contains(filesToUpload.get(i).getName())); - }else{ - assertTrue(uploadedFileNames.contains(filesToUpload.get(i).getName())); + }); } - } + }); } public void testMultipleArtworkUploadSuccess(){ - class TestISdl extends BaseISdl{ - @Override - public void sendRequests(List<? extends RPCRequest> rpcs, OnMultipleRequestListener listener) { - super.sendRequests(rpcs, listener); - if(rpcs.get(0) instanceof PutFile){ - for(RPCRequest message : rpcs){ - int correlationId = message.getCorrelationID(); - listener.addCorrelationId(correlationId); - PutFileResponse putFileResponse = new PutFileResponse(); - putFileResponse.setSuccess(true); - listener.onResponse(correlationId, putFileResponse); - } - } - } - } + ISdl internalInterface = mock(ISdl.class); - FileManager fileManager = new FileManager(new TestISdl(), mTestContext); - while(fileManager.getState() == BaseSubManager.SETTING_UP); + doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class)); + doAnswer(onSendRequestsSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); - int fileNum = 1; - List<SdlArtwork> artworkToUpload = new ArrayList<>(); - SdlArtwork sdlArtwork = new SdlArtwork(); - sdlArtwork.setName("art" + fileNum++); - Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); - sdlArtwork.setUri(uri); - sdlArtwork.setType(FileType.GRAPHIC_PNG); - artworkToUpload.add(sdlArtwork); - - sdlArtwork = new SdlArtwork(); - sdlArtwork.setName("art" + fileNum++); - uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/sdl_tray_icon"); - sdlArtwork.setUri(uri); - sdlArtwork.setType(FileType.GRAPHIC_PNG); - artworkToUpload.add(sdlArtwork); - - fileManager.uploadFiles(artworkToUpload, - new MultipleFileCompletionListener() { - @Override - public void onComplete(Map<String, String> errors) { - assertNull(errors); - } - }); - - List < String > uploadedFileNames = fileManager.getRemoteFileNames(); - for(SdlArtwork artwork : artworkToUpload){ - assertTrue(uploadedFileNames.contains(artwork.getName())); - } + final FileManager fileManager = new FileManager(internalInterface, mTestContext); + fileManager.start(new CompletionListener() { + @Override + public void onComplete(boolean success) { + assertTrue(success); + int fileNum = 1; + final List<SdlArtwork> artworkToUpload = new ArrayList<>(); + SdlArtwork sdlArtwork = new SdlArtwork(); + sdlArtwork.setName("art" + fileNum++); + Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl"); + sdlArtwork.setUri(uri); + sdlArtwork.setType(FileType.GRAPHIC_PNG); + artworkToUpload.add(sdlArtwork); + + sdlArtwork = new SdlArtwork(); + sdlArtwork.setName("art" + fileNum++); + uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/sdl_tray_icon"); + sdlArtwork.setUri(uri); + sdlArtwork.setType(FileType.GRAPHIC_PNG); + artworkToUpload.add(sdlArtwork); + + fileManager.uploadFiles(artworkToUpload, + new MultipleFileCompletionListener() { + @Override + public void onComplete(Map<String, String> errors) { + assertNull(errors); + List < String > uploadedFileNames = fileManager.getRemoteFileNames(); + for(SdlArtwork artwork : artworkToUpload){ + assertTrue(uploadedFileNames.contains(artwork.getName())); + } + } + }); + } + }); } }
\ No newline at end of file diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java b/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java index ecbf31ce6..1b512e4e9 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/api/FileManager.java @@ -3,7 +3,6 @@ package com.smartdevicelink.api; import android.content.Context; import android.content.res.Resources; import android.net.Uri; -import android.support.annotation.NonNull; import android.util.Log; import android.util.SparseArray; @@ -11,14 +10,11 @@ import com.smartdevicelink.proxy.RPCRequest; import com.smartdevicelink.proxy.RPCResponse; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.rpc.DeleteFile; -import com.smartdevicelink.proxy.rpc.DeleteFileResponse; -import com.smartdevicelink.proxy.rpc.Image; import com.smartdevicelink.proxy.rpc.ListFiles; import com.smartdevicelink.proxy.rpc.ListFilesResponse; import com.smartdevicelink.proxy.rpc.PutFile; import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener; -import com.smartdevicelink.proxy.rpc.listeners.OnPutFileUpdateListener; import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener; import java.io.ByteArrayOutputStream; @@ -63,6 +59,10 @@ public class FileManager extends BaseSubManager { // GETTERS + /** + * Returns a list of file names currently residing on core + * @return List<String> of remote file names + */ public List<String> getRemoteFileNames() { if (getState() != BaseSubManager.READY){ // error and dont return list @@ -96,6 +96,11 @@ public class FileManager extends BaseSubManager { // DELETION + /** + * Attempts to delete the desired file from core, calls listener with indication of success/failure + * @param fileName name of file to be deleted + * @param listener callback that is called on response from core + */ public void deleteRemoteFileWithName(final String fileName, final CompletionListener listener){ if(fileName == null){ return; @@ -114,6 +119,11 @@ public class FileManager extends BaseSubManager { internalInterface.sendRPCRequest(deleteFile); } + /** + * Attempts to delete a list of files from core, calls listener with indication of success/failure + * @param fileNames list of file names to be deleted + * @param listener callback that is called once core responds to all deletion requests + */ public void deleteRemoteFilesWithNames(List<String> fileNames, final MultipleFileCompletionListener listener){ if(fileNames == null || fileNames.isEmpty()){ return; @@ -237,6 +247,11 @@ public class FileManager extends BaseSubManager { }); } + /** + * Attempts to upload a SdlFile to core + * @param file SdlFile with file name and one of A) fileData, B) Uri, or C) resourceID set + * @param listener called when core responds to the attempt to upload the file + */ public void uploadFile(final SdlFile file, final CompletionListener listener){ PutFile putFile = createPutFile(file); @@ -259,6 +274,11 @@ public class FileManager extends BaseSubManager { internalInterface.sendRPCRequest(putFile); } + /** + * Attempts to upload a list of SdlFiles to core + * @param files list of SdlFiles with file name and one of A) fileData, B) Uri, or C) resourceID set + * @param listener callback that is called once core responds to all upload requests + */ public void uploadFiles(List<? extends SdlFile> files, final MultipleFileCompletionListener listener){ if(files == null || files.isEmpty()){ return; @@ -270,24 +290,40 @@ public class FileManager extends BaseSubManager { sendMultipleFileOperations(putFileRequests, listener); } + /** + * Attempts to upload a SdlArtwork to core + * @param file SdlArtwork with file name and one of A) fileData, B) Uri, or C) resourceID set + * @param listener called when core responds to the attempt to upload the file + */ public void uploadArtwork(final SdlArtwork file, final CompletionListener listener){ uploadFile(file, listener); } + /** + * Attempts to upload a list of SdlArtworks to core + * @param files list of SdlArtworks with file name and one of A) fileData, B) Uri, or C) resourceID set + * @param listener callback that is called once core responds to all upload requests + */ public void uploadArtworks(List<SdlArtwork> files, final MultipleFileCompletionListener listener){ uploadFiles(files, listener); } // HELPERS + /** + * Builds an error string for a given Result and info string + * @param resultCode Result + * @param info String returned from OnRPCRequestListener.onError() + * @return Error string + */ static public String buildErrorString(Result resultCode, String info){ return resultCode.toString() + " : " + info; } /** * Helper method to take resource files and turn them into byte arrays - * @param resource Resource file id. - * @return Resulting byte array. + * @param resource Resource file id + * @return Resulting byte array */ private byte[] contentsOfResource(int resource) { InputStream is = null; @@ -311,7 +347,7 @@ public class FileManager extends BaseSubManager { /** * Helper method to take Uri and turn it into byte array * @param uri Uri for desired file - * @return Resulting byte array. + * @return Resulting byte array */ private byte[] contentsOfUri(Uri uri){ InputStream is = null; @@ -332,6 +368,11 @@ public class FileManager extends BaseSubManager { } } + /** + * Helper method to take InputStream and turn it into byte array + * @param is valid InputStream + * @return Resulting byte array + */ private byte[] contentsOfInputStream(InputStream is){ if(is == null){ return null; |