From 32a56a6780064a8af153ae1ad8a4d7106e183253 Mon Sep 17 00:00:00 2001 From: Bilal Alsharifi Date: Thu, 11 Oct 2018 15:38:59 -0400 Subject: Add unit tests for ScreenManager states --- .../managers/screen/ScreenManagerTests.java | 77 ++++++++++++++++++---- .../smartdevicelink/managers/BaseSubManager.java | 2 +- .../managers/screen/ScreenManager.java | 10 ++- 3 files changed, 74 insertions(+), 15 deletions(-) diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/ScreenManagerTests.java b/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/ScreenManagerTests.java index 211b0fa48..4436d2ab0 100644 --- a/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/ScreenManagerTests.java +++ b/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/ScreenManagerTests.java @@ -28,38 +28,44 @@ import static org.mockito.Mockito.mock; */ public class ScreenManagerTests extends AndroidTestCase2 { private ScreenManager screenManager; + private FileManager fileManager; private SdlArtwork testArtwork; @Override public void setUp() throws Exception{ super.setUp(); - FileManager fileManager = mock(FileManager.class); - ISdl internalInterface = mock(ISdl.class); + fileManager = mock(FileManager.class); // When internalInterface.sendRPCRequest() is called, create a fake success response + ISdl internalInterface = mock(ISdl.class); + sendFakeSetDisplayLayoutResponse(internalInterface, true); + + screenManager = new ScreenManager(internalInterface, fileManager); + screenManager.start(null); + + testArtwork = new SdlArtwork("testFile", FileType.GRAPHIC_PNG, 1, false); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + } + + // When internalInterface.sendRPCRequest() is called, create a fake response + private void sendFakeSetDisplayLayoutResponse(ISdl internalInterface, final boolean success){ Answer answer = new Answer() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); RPCRequest request = (RPCRequest) args[0]; RPCResponse response = new RPCResponse(FunctionID.SET_DISPLAY_LAYOUT.toString()); - response.setSuccess(true); + response.setSuccess(success); request.getOnRPCResponseListener().onResponse(0, response); return null; } }; doAnswer(answer).when(internalInterface).sendRPCRequest(any(RPCRequest.class)); - - screenManager = new ScreenManager(internalInterface, fileManager); - screenManager.start(null); - - testArtwork = new SdlArtwork("testFile", FileType.GRAPHIC_PNG, 1, false); - } - - @Override - public void tearDown() throws Exception { - super.tearDown(); } public void testInstantiation(){ @@ -80,6 +86,51 @@ public class ScreenManagerTests extends AndroidTestCase2 { assertNull(screenManager.getSoftButtonObjectById(1)); assertEquals(screenManager.getState(), BaseSubManager.READY); } + + public void testManagerStates() { + ISdl tempInternalInterface = mock(ISdl.class); + ScreenManager tempScreenManager = new ScreenManager(tempInternalInterface, fileManager); + + // Case 1 + sendFakeSetDisplayLayoutResponse(tempInternalInterface, true); + tempScreenManager.start(null); + tempScreenManager.getSoftButtonManager().transitionToState(BaseSubManager.READY); + tempScreenManager.getTextAndGraphicManager().transitionToState(BaseSubManager.READY); + tempScreenManager.checkState(); + assertEquals(BaseSubManager.READY, tempScreenManager.getState()); + + // Case 2 + sendFakeSetDisplayLayoutResponse(tempInternalInterface, true); + tempScreenManager.start(null); + tempScreenManager.getSoftButtonManager().transitionToState(BaseSubManager.ERROR); + tempScreenManager.getTextAndGraphicManager().transitionToState(BaseSubManager.ERROR); + tempScreenManager.checkState(); + assertEquals(BaseSubManager.ERROR, tempScreenManager.getState()); + + // Case 3 + sendFakeSetDisplayLayoutResponse(tempInternalInterface, false); + tempScreenManager.start(null); + tempScreenManager.getSoftButtonManager().transitionToState(BaseSubManager.SETTING_UP); + tempScreenManager.getTextAndGraphicManager().transitionToState(BaseSubManager.READY); + tempScreenManager.checkState(); + assertEquals(BaseSubManager.SETTING_UP, tempScreenManager.getState()); + + // Case 4 + sendFakeSetDisplayLayoutResponse(tempInternalInterface, true); + tempScreenManager.start(null); + tempScreenManager.getSoftButtonManager().transitionToState(BaseSubManager.READY); + tempScreenManager.getTextAndGraphicManager().transitionToState(BaseSubManager.ERROR); + tempScreenManager.checkState(); + assertEquals(BaseSubManager.LIMITED, tempScreenManager.getState()); + + // Case 5 + sendFakeSetDisplayLayoutResponse(tempInternalInterface, false); + tempScreenManager.start(null); + tempScreenManager.getSoftButtonManager().transitionToState(BaseSubManager.READY); + tempScreenManager.getTextAndGraphicManager().transitionToState(BaseSubManager.READY); + tempScreenManager.checkState(); + assertEquals(BaseSubManager.LIMITED, tempScreenManager.getState()); + } public void testSetTextField() { screenManager.setTextField1("It is"); diff --git a/sdl_android/src/main/java/com/smartdevicelink/managers/BaseSubManager.java b/sdl_android/src/main/java/com/smartdevicelink/managers/BaseSubManager.java index 6475b481e..dc0abe067 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/managers/BaseSubManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/managers/BaseSubManager.java @@ -50,7 +50,7 @@ public abstract class BaseSubManager { transitionToState(SHUTDOWN); } - protected void transitionToState(int state) { + public void transitionToState(int state) { synchronized (STATE_LOCK) { this.state = state; } diff --git a/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java b/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java index ee855e745..fe483b5ac 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java @@ -41,7 +41,7 @@ public class ScreenManager extends BaseSubManager { } }; - private void checkState() { + void checkState() { if (softButtonManager != null && textAndGraphicManager != null) { if (softButtonManager.getState() == BaseSubManager.READY && textAndGraphicManager.getState() == BaseSubManager.READY && setDisplayLayoutSuccess != null && setDisplayLayoutSuccess) { DebugTool.logInfo("Starting screen manager, all sub managers are in ready state"); @@ -122,6 +122,14 @@ public class ScreenManager extends BaseSubManager { super.dispose(); } + SoftButtonManager getSoftButtonManager(){ + return this.softButtonManager; + } + + TextAndGraphicManager getTextAndGraphicManager(){ + return this.textAndGraphicManager; + } + /** * Set the textField1 on the head unit screen * Sending an empty String "" will clear the field -- cgit v1.2.1