diff options
Diffstat (limited to 'core/tests')
-rw-r--r-- | core/tests/uwbtests/src/android/uwb/RangingManagerTest.java | 166 | ||||
-rw-r--r-- | core/tests/uwbtests/src/android/uwb/RangingSessionTest.java | 244 |
2 files changed, 297 insertions, 113 deletions
diff --git a/core/tests/uwbtests/src/android/uwb/RangingManagerTest.java b/core/tests/uwbtests/src/android/uwb/RangingManagerTest.java index 6df1c3ed220f..c01bb75c32aa 100644 --- a/core/tests/uwbtests/src/android/uwb/RangingManagerTest.java +++ b/core/tests/uwbtests/src/android/uwb/RangingManagerTest.java @@ -45,14 +45,14 @@ public class RangingManagerTest { private static final IUwbAdapter ADAPTER = mock(IUwbAdapter.class); private static final Executor EXECUTOR = UwbTestUtils.getExecutor(); private static final PersistableBundle PARAMS = new PersistableBundle(); - private static final @CloseReason int CLOSE_REASON = CloseReason.UNKNOWN; + private static final @RangingChangeReason int REASON = RangingChangeReason.UNKNOWN; @Test - public void testOpenSession_StartRangingInvoked() throws RemoteException { + public void testOpenSession_OpenRangingInvoked() throws RemoteException { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); rangingManager.openSession(PARAMS, EXECUTOR, callback); - verify(ADAPTER, times(1)).startRanging(eq(rangingManager), eq(PARAMS)); + verify(ADAPTER, times(1)).openRanging(eq(rangingManager), eq(PARAMS)); } @Test @@ -60,7 +60,7 @@ public class RangingManagerTest { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); + when(ADAPTER.openRanging(any(), any())).thenReturn(handle); rangingManager.openSession(PARAMS, EXECUTOR, callback); @@ -73,34 +73,34 @@ public class RangingManagerTest { } @Test - public void testOnRangingStarted_ValidSessionHandle() throws RemoteException { + public void testOnRangingOpened_ValidSessionHandle() throws RemoteException { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); + when(ADAPTER.openRanging(any(), any())).thenReturn(handle); rangingManager.openSession(PARAMS, EXECUTOR, callback); - rangingManager.onRangingStarted(handle, PARAMS); - verify(callback, times(1)).onOpenSuccess(any(), any()); + rangingManager.onRangingOpened(handle); + verify(callback, times(1)).onOpened(any()); } @Test - public void testOnRangingStarted_InvalidSessionHandle() throws RemoteException { + public void testOnRangingOpened_InvalidSessionHandle() throws RemoteException { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); - rangingManager.onRangingStarted(new SessionHandle(2), PARAMS); - verify(callback, times(0)).onOpenSuccess(any(), any()); + rangingManager.onRangingOpened(new SessionHandle(2)); + verify(callback, times(0)).onOpened(any()); } @Test - public void testOnRangingStarted_MultipleSessionsRegistered() throws RemoteException { + public void testOnRangingOpened_MultipleSessionsRegistered() throws RemoteException { SessionHandle sessionHandle1 = new SessionHandle(1); SessionHandle sessionHandle2 = new SessionHandle(2); RangingSession.Callback callback1 = mock(RangingSession.Callback.class); RangingSession.Callback callback2 = mock(RangingSession.Callback.class); - when(ADAPTER.startRanging(any(), any())) + when(ADAPTER.openRanging(any(), any())) .thenReturn(sessionHandle1) .thenReturn(sessionHandle2); @@ -108,25 +108,50 @@ public class RangingManagerTest { rangingManager.openSession(PARAMS, EXECUTOR, callback1); rangingManager.openSession(PARAMS, EXECUTOR, callback2); - rangingManager.onRangingStarted(sessionHandle1, PARAMS); - verify(callback1, times(1)).onOpenSuccess(any(), any()); - verify(callback2, times(0)).onOpenSuccess(any(), any()); + rangingManager.onRangingOpened(sessionHandle1); + verify(callback1, times(1)).onOpened(any()); + verify(callback2, times(0)).onOpened(any()); - rangingManager.onRangingStarted(sessionHandle2, PARAMS); - verify(callback1, times(1)).onOpenSuccess(any(), any()); - verify(callback2, times(1)).onOpenSuccess(any(), any()); + rangingManager.onRangingOpened(sessionHandle2); + verify(callback1, times(1)).onOpened(any()); + verify(callback2, times(1)).onOpened(any()); } @Test - public void testOnRangingClosed_OnRangingClosedCalled() throws RemoteException { + public void testCorrectCallbackInvoked() throws RemoteException { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); + when(ADAPTER.openRanging(any(), any())).thenReturn(handle); + rangingManager.openSession(PARAMS, EXECUTOR, callback); + rangingManager.onRangingOpened(handle); + verify(callback, times(1)).onOpened(any()); + + rangingManager.onRangingStarted(handle, PARAMS); + verify(callback, times(1)).onStarted(eq(PARAMS)); + + rangingManager.onRangingStartFailed(handle, REASON, PARAMS); + verify(callback, times(1)).onStartFailed(eq(REASON), eq(PARAMS)); + + RangingReport report = UwbTestUtils.getRangingReports(1); + rangingManager.onRangingResult(handle, report); + verify(callback, times(1)).onReportReceived(eq(report)); - rangingManager.onRangingClosed(handle, CLOSE_REASON, PARAMS); - verify(callback, times(1)).onClosed(anyInt(), any()); + rangingManager.onRangingReconfigured(handle, PARAMS); + verify(callback, times(1)).onReconfigured(eq(PARAMS)); + + rangingManager.onRangingReconfigureFailed(handle, REASON, PARAMS); + verify(callback, times(1)).onReconfigureFailed(eq(REASON), eq(PARAMS)); + + rangingManager.onRangingStopped(handle); + verify(callback, times(1)).onStopped(); + + rangingManager.onRangingStopFailed(handle, REASON, PARAMS); + verify(callback, times(1)).onStopFailed(eq(REASON), eq(PARAMS)); + + rangingManager.onRangingClosed(handle, REASON, PARAMS); + verify(callback, times(1)).onClosed(eq(REASON), eq(PARAMS)); } @Test @@ -138,7 +163,7 @@ public class RangingManagerTest { RangingSession.Callback callback1 = mock(RangingSession.Callback.class); RangingSession.Callback callback2 = mock(RangingSession.Callback.class); - when(ADAPTER.startRanging(any(), any())) + when(ADAPTER.openRanging(any(), any())) .thenReturn(sessionHandle1) .thenReturn(sessionHandle2); @@ -146,37 +171,23 @@ public class RangingManagerTest { rangingManager.openSession(PARAMS, EXECUTOR, callback1); rangingManager.openSession(PARAMS, EXECUTOR, callback2); - rangingManager.onRangingClosed(sessionHandle1, CLOSE_REASON, PARAMS); + rangingManager.onRangingClosed(sessionHandle1, REASON, PARAMS); verify(callback1, times(1)).onClosed(anyInt(), any()); verify(callback2, times(0)).onClosed(anyInt(), any()); - rangingManager.onRangingClosed(sessionHandle2, CLOSE_REASON, PARAMS); + rangingManager.onRangingClosed(sessionHandle2, REASON, PARAMS); verify(callback1, times(1)).onClosed(anyInt(), any()); verify(callback2, times(1)).onClosed(anyInt(), any()); } @Test - public void testOnRangingReport_OnReportReceived() throws RemoteException { - RangingManager rangingManager = new RangingManager(ADAPTER); - RangingSession.Callback callback = mock(RangingSession.Callback.class); - SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); - rangingManager.openSession(PARAMS, EXECUTOR, callback); - rangingManager.onRangingStarted(handle, PARAMS); - - RangingReport report = UwbTestUtils.getRangingReports(1); - rangingManager.onRangingResult(handle, report); - verify(callback, times(1)).onReportReceived(eq(report)); - } - - @Test public void testOnRangingReport_MultipleSessionsRegistered() throws RemoteException { SessionHandle sessionHandle1 = new SessionHandle(1); SessionHandle sessionHandle2 = new SessionHandle(2); RangingSession.Callback callback1 = mock(RangingSession.Callback.class); RangingSession.Callback callback2 = mock(RangingSession.Callback.class); - when(ADAPTER.startRanging(any(), any())) + when(ADAPTER.openRanging(any(), any())) .thenReturn(sessionHandle1) .thenReturn(sessionHandle2); @@ -196,65 +207,54 @@ public class RangingManagerTest { } @Test - public void testOnClose_Reasons() throws RemoteException { - runOnClose_Reason(CloseReason.LOCAL_API, - RangingSession.Callback.CLOSE_REASON_LOCAL_CLOSE_API); + public void testReasons() throws RemoteException { + runReason(RangingChangeReason.LOCAL_API, + RangingSession.Callback.REASON_LOCAL_REQUEST); + + runReason(RangingChangeReason.MAX_SESSIONS_REACHED, + RangingSession.Callback.REASON_MAX_SESSIONS_REACHED); - runOnClose_Reason(CloseReason.MAX_SESSIONS_REACHED, - RangingSession.Callback.CLOSE_REASON_LOCAL_MAX_SESSIONS_REACHED); + runReason(RangingChangeReason.PROTOCOL_SPECIFIC, + RangingSession.Callback.REASON_PROTOCOL_SPECIFIC_ERROR); - runOnClose_Reason(CloseReason.PROTOCOL_SPECIFIC, - RangingSession.Callback.CLOSE_REASON_PROTOCOL_SPECIFIC); + runReason(RangingChangeReason.REMOTE_REQUEST, + RangingSession.Callback.REASON_REMOTE_REQUEST); - runOnClose_Reason(CloseReason.REMOTE_REQUEST, - RangingSession.Callback.CLOSE_REASON_REMOTE_REQUEST); + runReason(RangingChangeReason.SYSTEM_POLICY, + RangingSession.Callback.REASON_SYSTEM_POLICY); - runOnClose_Reason(CloseReason.SYSTEM_POLICY, - RangingSession.Callback.CLOSE_REASON_LOCAL_SYSTEM_POLICY); + runReason(RangingChangeReason.BAD_PARAMETERS, + RangingSession.Callback.REASON_BAD_PARAMETERS); - runOnClose_Reason(CloseReason.UNKNOWN, - RangingSession.Callback.CLOSE_REASON_UNKNOWN); + runReason(RangingChangeReason.UNKNOWN, + RangingSession.Callback.REASON_UNKNOWN); } - private void runOnClose_Reason(@CloseReason int reasonIn, - @RangingSession.Callback.CloseReason int reasonOut) throws RemoteException { + private void runReason(@RangingChangeReason int reasonIn, + @RangingSession.Callback.Reason int reasonOut) throws RemoteException { RangingManager rangingManager = new RangingManager(ADAPTER); RangingSession.Callback callback = mock(RangingSession.Callback.class); SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); + when(ADAPTER.openRanging(any(), any())).thenReturn(handle); rangingManager.openSession(PARAMS, EXECUTOR, callback); - rangingManager.onRangingClosed(handle, reasonIn, PARAMS); - verify(callback, times(1)).onClosed(eq(reasonOut), eq(PARAMS)); - } - - @Test - public void testStartFailureReasons() throws RemoteException { - runOnRangingStartFailed_Reason(StartFailureReason.BAD_PARAMETERS, - RangingSession.Callback.CLOSE_REASON_LOCAL_BAD_PARAMETERS); + rangingManager.onRangingOpenFailed(handle, reasonIn, PARAMS); + verify(callback, times(1)).onOpenFailed(eq(reasonOut), eq(PARAMS)); - runOnRangingStartFailed_Reason(StartFailureReason.MAX_SESSIONS_REACHED, - RangingSession.Callback.CLOSE_REASON_LOCAL_MAX_SESSIONS_REACHED); + // Open a new session + rangingManager.openSession(PARAMS, EXECUTOR, callback); + rangingManager.onRangingOpened(handle); - runOnRangingStartFailed_Reason(StartFailureReason.PROTOCOL_SPECIFIC, - RangingSession.Callback.CLOSE_REASON_PROTOCOL_SPECIFIC); + rangingManager.onRangingStartFailed(handle, reasonIn, PARAMS); + verify(callback, times(1)).onStartFailed(eq(reasonOut), eq(PARAMS)); - runOnRangingStartFailed_Reason(StartFailureReason.SYSTEM_POLICY, - RangingSession.Callback.CLOSE_REASON_LOCAL_SYSTEM_POLICY); + rangingManager.onRangingReconfigureFailed(handle, reasonIn, PARAMS); + verify(callback, times(1)).onReconfigureFailed(eq(reasonOut), eq(PARAMS)); - runOnRangingStartFailed_Reason(StartFailureReason.UNKNOWN, - RangingSession.Callback.CLOSE_REASON_UNKNOWN); - } - - private void runOnRangingStartFailed_Reason(@StartFailureReason int reasonIn, - @RangingSession.Callback.CloseReason int reasonOut) throws RemoteException { - RangingManager rangingManager = new RangingManager(ADAPTER); - RangingSession.Callback callback = mock(RangingSession.Callback.class); - SessionHandle handle = new SessionHandle(1); - when(ADAPTER.startRanging(any(), any())).thenReturn(handle); - rangingManager.openSession(PARAMS, EXECUTOR, callback); + rangingManager.onRangingStopFailed(handle, reasonIn, PARAMS); + verify(callback, times(1)).onStopFailed(eq(reasonOut), eq(PARAMS)); - rangingManager.onRangingStartFailed(handle, reasonIn, PARAMS); + rangingManager.onRangingClosed(handle, reasonIn, PARAMS); verify(callback, times(1)).onClosed(eq(reasonOut), eq(PARAMS)); } } diff --git a/core/tests/uwbtests/src/android/uwb/RangingSessionTest.java b/core/tests/uwbtests/src/android/uwb/RangingSessionTest.java index 702c68ebc9de..e5eea26f5d11 100644 --- a/core/tests/uwbtests/src/android/uwb/RangingSessionTest.java +++ b/core/tests/uwbtests/src/android/uwb/RangingSessionTest.java @@ -19,9 +19,11 @@ package android.uwb; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -34,6 +36,8 @@ import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import java.util.concurrent.Executor; @@ -43,47 +47,48 @@ import java.util.concurrent.Executor; @SmallTest @RunWith(AndroidJUnit4.class) public class RangingSessionTest { - private static final IUwbAdapter ADAPTER = mock(IUwbAdapter.class); private static final Executor EXECUTOR = UwbTestUtils.getExecutor(); private static final PersistableBundle PARAMS = new PersistableBundle(); - private static final @RangingSession.Callback.CloseReason int CLOSE_REASON = - RangingSession.Callback.CLOSE_REASON_LOCAL_GENERIC_ERROR; + private static final @RangingSession.Callback.Reason int REASON = + RangingSession.Callback.REASON_GENERIC_ERROR; @Test - public void testOnRangingStarted_OnOpenSuccessCalled() { + public void testOnRangingOpened_OnOpenSuccessCalled() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); verifyOpenState(session, false); - session.onRangingStarted(PARAMS); + session.onRangingOpened(); verifyOpenState(session, true); // Verify that the onOpenSuccess callback was invoked - verify(callback, times(1)).onOpenSuccess(eq(session), any()); + verify(callback, times(1)).onOpened(eq(session)); verify(callback, times(0)).onClosed(anyInt(), any()); } @Test - public void testOnRangingStarted_CannotOpenClosedSession() { + public void testOnRangingOpened_CannotOpenClosedSession() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); - session.onRangingStarted(PARAMS); + session.onRangingOpened(); verifyOpenState(session, true); - verify(callback, times(1)).onOpenSuccess(eq(session), any()); + verify(callback, times(1)).onOpened(eq(session)); verify(callback, times(0)).onClosed(anyInt(), any()); - session.onRangingClosed(CLOSE_REASON, PARAMS); + session.onRangingClosed(REASON, PARAMS); verifyOpenState(session, false); - verify(callback, times(1)).onOpenSuccess(eq(session), any()); + verify(callback, times(1)).onOpened(eq(session)); verify(callback, times(1)).onClosed(anyInt(), any()); // Now invoke the ranging started callback and ensure the session remains closed - session.onRangingStarted(PARAMS); + session.onRangingOpened(); verifyOpenState(session, false); - verify(callback, times(1)).onOpenSuccess(eq(session), any()); + verify(callback, times(1)).onOpened(eq(session)); verify(callback, times(1)).onClosed(anyInt(), any()); } @@ -91,27 +96,30 @@ public class RangingSessionTest { public void testOnRangingClosed_OnClosedCalledWhenSessionNotOpen() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); verifyOpenState(session, false); - session.onRangingClosed(CLOSE_REASON, PARAMS); + session.onRangingClosed(REASON, PARAMS); verifyOpenState(session, false); // Verify that the onOpenSuccess callback was invoked - verify(callback, times(0)).onOpenSuccess(eq(session), any()); + verify(callback, times(0)).onOpened(eq(session)); verify(callback, times(1)).onClosed(anyInt(), any()); } - @Test public void testOnRangingClosed_OnClosedCalled() { + @Test + public void testOnRangingClosed_OnClosedCalled() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); session.onRangingStarted(PARAMS); - session.onRangingClosed(CLOSE_REASON, PARAMS); + session.onRangingClosed(REASON, PARAMS); verify(callback, times(1)).onClosed(anyInt(), any()); verifyOpenState(session, false); - session.onRangingClosed(CLOSE_REASON, PARAMS); + session.onRangingClosed(REASON, PARAMS); verify(callback, times(2)).onClosed(anyInt(), any()); } @@ -119,7 +127,8 @@ public class RangingSessionTest { public void testOnRangingResult_OnReportReceivedCalled() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); verifyOpenState(session, false); session.onRangingStarted(PARAMS); @@ -131,11 +140,83 @@ public class RangingSessionTest { } @Test - public void testClose() throws RemoteException { + public void testStart_CannotStartIfAlreadyStarted() throws RemoteException { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + doAnswer(new StartAnswer(session)).when(adapter).startRanging(any(), any()); + session.onRangingOpened(); + + session.start(PARAMS); + verify(callback, times(1)).onStarted(any()); + + // Calling start again should throw an illegal state + verifyThrowIllegalState(() -> session.start(PARAMS)); + verify(callback, times(1)).onStarted(any()); + } + + @Test + public void testStop_CannotStopIfAlreadyStopped() throws RemoteException { + SessionHandle handle = new SessionHandle(123); + RangingSession.Callback callback = mock(RangingSession.Callback.class); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + doAnswer(new StartAnswer(session)).when(adapter).startRanging(any(), any()); + doAnswer(new StopAnswer(session)).when(adapter).stopRanging(any()); + session.onRangingOpened(); + session.start(PARAMS); + + verifyNoThrowIllegalState(session::stop); + verify(callback, times(1)).onStopped(); + + // Calling stop again should throw an illegal state + verifyThrowIllegalState(session::stop); + verify(callback, times(1)).onStopped(); + } + + @Test + public void testReconfigure_OnlyWhenOpened() throws RemoteException { + SessionHandle handle = new SessionHandle(123); + RangingSession.Callback callback = mock(RangingSession.Callback.class); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + doAnswer(new StartAnswer(session)).when(adapter).startRanging(any(), any()); + doAnswer(new ReconfigureAnswer(session)).when(adapter).reconfigureRanging(any(), any()); + + verifyThrowIllegalState(() -> session.reconfigure(PARAMS)); + verify(callback, times(0)).onReconfigured(any()); + verifyOpenState(session, false); + + session.onRangingOpened(); + verifyNoThrowIllegalState(() -> session.reconfigure(PARAMS)); + verify(callback, times(1)).onReconfigured(any()); + verifyOpenState(session, true); + session.onRangingStarted(PARAMS); + verifyNoThrowIllegalState(() -> session.reconfigure(PARAMS)); + verify(callback, times(2)).onReconfigured(any()); + verifyOpenState(session, true); + + session.onRangingStopped(); + verifyNoThrowIllegalState(() -> session.reconfigure(PARAMS)); + verify(callback, times(3)).onReconfigured(any()); + verifyOpenState(session, true); + + + session.onRangingClosed(REASON, PARAMS); + verifyThrowIllegalState(() -> session.reconfigure(PARAMS)); + verify(callback, times(3)).onReconfigured(any()); + verifyOpenState(session, false); + } + + @Test + public void testClose_NoCallbackUntilInvoked() throws RemoteException { + SessionHandle handle = new SessionHandle(123); + RangingSession.Callback callback = mock(RangingSession.Callback.class); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + session.onRangingOpened(); // Calling close multiple times should invoke closeRanging until the session receives // the onClosed callback. @@ -143,7 +224,7 @@ public class RangingSessionTest { for (int i = 1; i <= totalCallsBeforeOnRangingClosed; i++) { session.close(); verifyOpenState(session, true); - verify(ADAPTER, times(i)).closeRanging(handle); + verify(adapter, times(i)).closeRanging(handle); verify(callback, times(0)).onClosed(anyInt(), any()); } @@ -151,18 +232,47 @@ public class RangingSessionTest { // the session's close. final int totalCallsAfterOnRangingClosed = 2; for (int i = 1; i <= totalCallsAfterOnRangingClosed; i++) { - session.onRangingClosed(CLOSE_REASON, PARAMS); + session.onRangingClosed(REASON, PARAMS); verifyOpenState(session, false); - verify(ADAPTER, times(totalCallsBeforeOnRangingClosed)).closeRanging(handle); + verify(adapter, times(totalCallsBeforeOnRangingClosed)).closeRanging(handle); verify(callback, times(i)).onClosed(anyInt(), any()); } } @Test + public void testClose_OnClosedCalled() throws RemoteException { + SessionHandle handle = new SessionHandle(123); + RangingSession.Callback callback = mock(RangingSession.Callback.class); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + doAnswer(new CloseAnswer(session)).when(adapter).closeRanging(any()); + session.onRangingOpened(); + + session.close(); + verify(callback, times(1)).onClosed(anyInt(), any()); + } + + @Test + public void testClose_CannotInteractFurther() throws RemoteException { + SessionHandle handle = new SessionHandle(123); + RangingSession.Callback callback = mock(RangingSession.Callback.class); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); + doAnswer(new CloseAnswer(session)).when(adapter).closeRanging(any()); + session.close(); + + verifyThrowIllegalState(() -> session.start(PARAMS)); + verifyThrowIllegalState(() -> session.reconfigure(PARAMS)); + verifyThrowIllegalState(() -> session.stop()); + verifyNoThrowIllegalState(() -> session.close()); + } + + @Test public void testOnRangingResult_OnReportReceivedCalledWhenOpen() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); assertFalse(session.isOpen()); session.onRangingStarted(PARAMS); @@ -178,7 +288,8 @@ public class RangingSessionTest { public void testOnRangingResult_OnReportReceivedNotCalledWhenNotOpen() { SessionHandle handle = new SessionHandle(123); RangingSession.Callback callback = mock(RangingSession.Callback.class); - RangingSession session = new RangingSession(EXECUTOR, callback, ADAPTER, handle); + IUwbAdapter adapter = mock(IUwbAdapter.class); + RangingSession session = new RangingSession(EXECUTOR, callback, adapter, handle); assertFalse(session.isOpen()); @@ -191,4 +302,77 @@ public class RangingSessionTest { private void verifyOpenState(RangingSession session, boolean expected) { assertEquals(expected, session.isOpen()); } + + private void verifyThrowIllegalState(Runnable runnable) { + try { + runnable.run(); + fail(); + } catch (IllegalStateException e) { + // Pass + } + } + + private void verifyNoThrowIllegalState(Runnable runnable) { + try { + runnable.run(); + } catch (IllegalStateException e) { + fail(); + } + } + + abstract class AdapterAnswer implements Answer { + protected RangingSession mSession; + + protected AdapterAnswer(RangingSession session) { + mSession = session; + } + } + + class StartAnswer extends AdapterAnswer { + StartAnswer(RangingSession session) { + super(session); + } + + @Override + public Object answer(InvocationOnMock invocation) { + mSession.onRangingStarted(PARAMS); + return null; + } + } + + class ReconfigureAnswer extends AdapterAnswer { + ReconfigureAnswer(RangingSession session) { + super(session); + } + + @Override + public Object answer(InvocationOnMock invocation) { + mSession.onRangingReconfigured(PARAMS); + return null; + } + } + + class StopAnswer extends AdapterAnswer { + StopAnswer(RangingSession session) { + super(session); + } + + @Override + public Object answer(InvocationOnMock invocation) { + mSession.onRangingStopped(); + return null; + } + } + + class CloseAnswer extends AdapterAnswer { + CloseAnswer(RangingSession session) { + super(session); + } + + @Override + public Object answer(InvocationOnMock invocation) { + mSession.onRangingClosed(REASON, PARAMS); + return null; + } + } } |