diff options
author | NicoleYarroch <nicole@livio.io> | 2019-07-30 12:54:07 -0400 |
---|---|---|
committer | NicoleYarroch <nicole@livio.io> | 2019-07-30 12:54:07 -0400 |
commit | 94f788da9d80619dfd1af770127be90655d8227b (patch) | |
tree | 6838ed490ebfc257a827bab813955807d43f2880 | |
parent | 89e60d7b7a292879ec5809f33423cc5ba330771a (diff) | |
download | sdl_android-94f788da9d80619dfd1af770127be90655d8227b.tar.gz |
Added test cases for canceling a choice set
-rw-r--r-- | android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentChoiceSetOperationTests.java | 131 |
1 files changed, 128 insertions, 3 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentChoiceSetOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentChoiceSetOperationTests.java index ea5204eae..c70946206 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentChoiceSetOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentChoiceSetOperationTests.java @@ -36,7 +36,10 @@ package com.smartdevicelink.managers.screen.choiceset; import com.smartdevicelink.AndroidTestCase2; +import com.smartdevicelink.protocol.enums.FunctionID; +import com.smartdevicelink.proxy.RPCResponse; import com.smartdevicelink.proxy.interfaces.ISdl; +import com.smartdevicelink.proxy.rpc.CancelInteraction; import com.smartdevicelink.proxy.rpc.KeyboardProperties; import com.smartdevicelink.proxy.rpc.PerformInteraction; import com.smartdevicelink.proxy.rpc.enums.InteractionMode; @@ -44,26 +47,53 @@ import com.smartdevicelink.proxy.rpc.enums.KeyboardLayout; import com.smartdevicelink.proxy.rpc.enums.KeypressMode; import com.smartdevicelink.proxy.rpc.enums.Language; import com.smartdevicelink.proxy.rpc.enums.LayoutMode; +import com.smartdevicelink.proxy.rpc.enums.TriggerSource; +import com.smartdevicelink.test.Test; + +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import java.util.Collections; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; public class PresentChoiceSetOperationTests extends AndroidTestCase2 { private PresentChoiceSetOperation presentChoiceSetOperation; + private ChoiceSet choiceSet; + private ISdl internalInterface; + private Boolean hasCalledOperationCompletionHandler; @Override public void setUp() throws Exception{ super.setUp(); - ISdl internalInterface = mock(ISdl.class); + internalInterface = mock(ISdl.class); KeyboardListener keyboardListener = mock(KeyboardListener.class); - ChoiceSetSelectionListener choiceSetSelectionListener = mock(ChoiceSetSelectionListener.class); + + ChoiceSetSelectionListener choiceSetSelectionListener = new ChoiceSetSelectionListener() { + @Override + public void onChoiceSelected(ChoiceCell choiceCell, TriggerSource triggerSource, int rowIndex) { + + } + + @Override + public void onError(String error) { + hasCalledOperationCompletionHandler = true; + } + }; + ChoiceCell cell1 = new ChoiceCell("Cell1"); cell1.setChoiceId(0); - ChoiceSet choiceSet = new ChoiceSet("Test", Collections.singletonList(cell1), choiceSetSelectionListener); + choiceSet = new ChoiceSet("Test", Collections.singletonList(cell1), choiceSetSelectionListener); presentChoiceSetOperation = new PresentChoiceSetOperation(internalInterface, choiceSet, InteractionMode.MANUAL_ONLY, getKeyBoardProperties(), keyboardListener, choiceSetSelectionListener); + choiceSet.cancelID = Test.GENERAL_INTEGER; + hasCalledOperationCompletionHandler = false; + } @Override @@ -85,6 +115,7 @@ public class PresentChoiceSetOperationTests extends AndroidTestCase2 { assertNull(pi.getTimeoutPrompt()); assertNull(pi.getVrHelp()); assertEquals(pi.getTimeout(), Integer.valueOf(10000)); + assertEquals(pi.getCancelID(), Test.GENERAL_INTEGER); assertEquals(presentChoiceSetOperation.getLayoutMode(), LayoutMode.LIST_WITH_SEARCH); } @@ -102,4 +133,98 @@ public class PresentChoiceSetOperationTests extends AndroidTestCase2 { return properties; } + public void testCancelingTheChoiceSetSuccessfullyIfThreadIsRunning(){ + presentChoiceSetOperation.run(); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), true); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), false); + + Answer<Void> cancelInteractionAnswer = new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + CancelInteraction cancelInteraction = (CancelInteraction) args[0]; + + assertEquals(cancelInteraction.getCancelID(), choiceSet.cancelID); + assertEquals(cancelInteraction.getInteractionFunctionID().intValue(), FunctionID.PERFORM_INTERACTION.getId()); + + RPCResponse response = new RPCResponse(FunctionID.CANCEL_INTERACTION.toString()); + response.setSuccess(true); + cancelInteraction.getOnRPCResponseListener().onResponse(0, response); + + return null; + } + }; + doAnswer(cancelInteractionAnswer).when(internalInterface).sendRPC(any(CancelInteraction.class)); + + choiceSet.cancel(); + + assertEquals(hasCalledOperationCompletionHandler.booleanValue(), true); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), true); + } + + public void testCancelingTheChoiceSetUnsuccessfullyIfThreadIsRunning(){ + presentChoiceSetOperation.run(); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), true); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), false); + + Answer<Void> cancelInteractionAnswer = new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + CancelInteraction cancelInteraction = (CancelInteraction) args[0]; + + assertEquals(cancelInteraction.getCancelID(), choiceSet.cancelID); + assertEquals(cancelInteraction.getInteractionFunctionID().intValue(), FunctionID.PERFORM_INTERACTION.getId()); + + RPCResponse response = new RPCResponse(FunctionID.CANCEL_INTERACTION.toString()); + response.setSuccess(false); + cancelInteraction.getOnRPCResponseListener().onResponse(0, response); + + return null; + } + }; + doAnswer(cancelInteractionAnswer).when(internalInterface).sendRPC(any(CancelInteraction.class)); + + choiceSet.cancel(); + + assertEquals(hasCalledOperationCompletionHandler.booleanValue(), true); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), true); + } + + public void testCancelingTheChoiceSetIfThreadHasFinished(){ + presentChoiceSetOperation.run(); + presentChoiceSetOperation.finishOperation(); + + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), true); + + choiceSet.cancel(); + + verify(internalInterface, never()).sendRPC(any(CancelInteraction.class)); + + // assertEquals(hasCalledOperationCompletionHandler.booleanValue(), true); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), true); + } + + public void testCancelingTheChoiceSetIfThreadHasNotYetRun(){ + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), false); + + choiceSet.cancel(); + + verify(internalInterface, never()).sendRPC(any(CancelInteraction.class)); + + // Once the thread has started + presentChoiceSetOperation.run(); + + // Make sure it doesn't sent a `CancelInteraction` RPC + verify(internalInterface, never()).sendRPC(any(CancelInteraction.class)); + + assertEquals(hasCalledOperationCompletionHandler.booleanValue(), true); + assertEquals(presentChoiceSetOperation.isExecuting().booleanValue(), false); + assertEquals(presentChoiceSetOperation.isFinished().booleanValue(), true); + } } |