Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4f7a4e8 authored by William Escande's avatar William Escande
Browse files

HeadsetClient Test: force intent order

Bug: 311772251
Test: atest HeadsetClientStateMachineTest
Flag: TEST_ONLY
Change-Id: I6060f226d88d250eb46654acafd157ead57daa9f
parent 3e5d1e51
Loading
Loading
Loading
Loading
+26 −22
Original line number Original line Diff line number Diff line
@@ -72,6 +72,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.hamcrest.MockitoHamcrest;
import org.mockito.hamcrest.MockitoHamcrest;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoJUnit;
@@ -87,6 +88,7 @@ public class HeadsetClientStateMachineTest {
    private BluetoothAdapter mAdapter;
    private BluetoothAdapter mAdapter;
    private HandlerThread mHandlerThread;
    private HandlerThread mHandlerThread;
    private TestHeadsetClientStateMachine mHeadsetClientStateMachine;
    private TestHeadsetClientStateMachine mHeadsetClientStateMachine;
    private InOrder mInOrder;
    private BluetoothDevice mTestDevice;
    private BluetoothDevice mTestDevice;


    @Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
    @Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
@@ -109,6 +111,7 @@ public class HeadsetClientStateMachineTest {


    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        mInOrder = inOrder(mHeadsetClientService);
        // Setup mocks and test assets
        // Setup mocks and test assets
        // Set a valid volume
        // Set a valid volume
        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(2);
        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(2);
@@ -248,7 +251,9 @@ public class HeadsetClientStateMachineTest {
                .isInstanceOf(HeadsetClientStateMachine.Connecting.class);
                .isInstanceOf(HeadsetClientStateMachine.Connecting.class);


        // Verify that one connection state broadcast is executed
        // Verify that one connection state broadcast is executed
        verify(mHeadsetClientService, timeout(HeadsetClientStateMachine.CONNECTING_TIMEOUT_MS * 2))
        mInOrder.verify(
                        mHeadsetClientService,
                        timeout(HeadsetClientStateMachine.CONNECTING_TIMEOUT_MS * 2))
                .sendBroadcastMultiplePermissions(
                .sendBroadcastMultiplePermissions(
                        MockitoHamcrest.argThat(
                        MockitoHamcrest.argThat(
                                hasExtra(
                                hasExtra(
@@ -393,7 +398,7 @@ public class HeadsetClientStateMachineTest {
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        mHeadsetClientStateMachine.sendMessage(StackEvent.STACK_EVENT, eventCallStatusUpdated);
        mHeadsetClientStateMachine.sendMessage(StackEvent.STACK_EVENT, eventCallStatusUpdated);
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
        mInOrder.verify(mHeadsetClientService, never())
                .sendBroadcast(any(Intent.class), anyString(), any(Bundle.class));
                .sendBroadcast(any(Intent.class), anyString(), any(Bundle.class));


        // Provide information about the new call
        // Provide information about the new call
@@ -406,7 +411,8 @@ public class HeadsetClientStateMachineTest {
        eventIncomingCall.device = mTestDevice;
        eventIncomingCall.device = mTestDevice;


        mHeadsetClientStateMachine.sendMessage(StackEvent.STACK_EVENT, eventIncomingCall);
        mHeadsetClientStateMachine.sendMessage(StackEvent.STACK_EVENT, eventIncomingCall);
        verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        mInOrder.verify(mHeadsetClientService, never())
                .sendBroadcast(any(Intent.class), anyString(), any(Bundle.class));
                .sendBroadcast(any(Intent.class), anyString(), any(Bundle.class));


        // Signal that the complete list of calls was received.
        // Signal that the complete list of calls was received.
@@ -416,17 +422,15 @@ public class HeadsetClientStateMachineTest {
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());


        ArgumentCaptor<Intent> intentArgument = ArgumentCaptor.forClass(Intent.class);
        ArgumentCaptor<Intent> intentArgument = ArgumentCaptor.forClass(Intent.class);
        verify(mHeadsetClientService, timeout(QUERY_CURRENT_CALLS_TEST_WAIT_MILLIS).times(2))
        mInOrder.verify(mHeadsetClientService, timeout(QUERY_CURRENT_CALLS_TEST_WAIT_MILLIS))
                .sendBroadcast(intentArgument.capture(), anyString(), any(Bundle.class));
                .sendBroadcast(intentArgument.capture(), anyString(), any(Bundle.class));
        // Verify that the new call is being registered with the inBandRing flag set.
        // Verify that the new call is being registered with the inBandRing flag set.
        assertThat(
        HfpClientCall clientCall =
                        ((HfpClientCall)
                (HfpClientCall)
                        intentArgument
                        intentArgument
                                .getValue()
                                .getValue()
                                                .getParcelableExtra(
                                .getParcelableExtra(BluetoothHeadsetClient.EXTRA_CALL);
                                                        BluetoothHeadsetClient.EXTRA_CALL))
        assertThat(clientCall.isInBandRing()).isTrue();
                                .isInBandRing())
                .isTrue();


        // Disable In Band Ring and verify state gets propagated.
        // Disable In Band Ring and verify state gets propagated.
        eventInBandRing.valueInt = 0;
        eventInBandRing.valueInt = 0;
@@ -479,17 +483,17 @@ public class HeadsetClientStateMachineTest {


        // Verify the broadcast
        // Verify the broadcast
        ArgumentCaptor<Intent> intentArgument = ArgumentCaptor.forClass(Intent.class);
        ArgumentCaptor<Intent> intentArgument = ArgumentCaptor.forClass(Intent.class);
        verify(mHeadsetClientService)
        mInOrder.verify(mHeadsetClientService)
                .sendBroadcast(intentArgument.capture(), anyString(), any(Bundle.class));
                .sendBroadcast(intentArgument.capture(), anyString(), any(Bundle.class));


        // Verify that the parcelable extra has a legacy {@code BluetoothHeadsetClientCall} type for
        // Verify that the parcelable extra has a legacy {@code BluetoothHeadsetClientCall} type for
        // wearables.
        // wearables.
        assertThat(
        Object clientCall =
                (Object)
                (Object)
                        intentArgument
                        intentArgument
                                .getValue()
                                .getValue()
                                        .getParcelableExtra(BluetoothHeadsetClient.EXTRA_CALL))
                                .getParcelableExtra(BluetoothHeadsetClient.EXTRA_CALL);
                .isInstanceOf(BluetoothHeadsetClientCall.class);
        assertThat(clientCall).isInstanceOf(BluetoothHeadsetClientCall.class);


        // To satisfy the @After verification
        // To satisfy the @After verification
        verify(mHeadsetService).updateInbandRinging(eq(mTestDevice), eq(true));
        verify(mHeadsetService).updateInbandRinging(eq(mTestDevice), eq(true));
@@ -825,7 +829,7 @@ public class HeadsetClientStateMachineTest {
                BluetoothHeadsetClient.STATE_AUDIO_CONNECTED,
                BluetoothHeadsetClient.STATE_AUDIO_CONNECTED,
                BluetoothHeadsetClient.STATE_AUDIO_CONNECTING);
                BluetoothHeadsetClient.STATE_AUDIO_CONNECTING);


        verify(mHeadsetClientService).sendBroadcast(any(), any(), any());
        mInOrder.verify(mHeadsetClientService).sendBroadcast(any(), any(), any());
    }
    }


    @Test
    @Test
@@ -1589,7 +1593,7 @@ public class HeadsetClientStateMachineTest {
    }
    }


    private void verifySendBroadcastMultiplePermissions(Matcher<Intent>... matchers) {
    private void verifySendBroadcastMultiplePermissions(Matcher<Intent>... matchers) {
        verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
        mInOrder.verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
                .sendBroadcastMultiplePermissions(
                .sendBroadcastMultiplePermissions(
                        MockitoHamcrest.argThat(AllOf.allOf(matchers)),
                        MockitoHamcrest.argThat(AllOf.allOf(matchers)),
                        any(String[].class),
                        any(String[].class),
@@ -1597,7 +1601,7 @@ public class HeadsetClientStateMachineTest {
    }
    }


    private void verifySendBroadcast(Matcher<Intent>... matchers) {
    private void verifySendBroadcast(Matcher<Intent>... matchers) {
        verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
        mInOrder.verify(mHeadsetClientService, timeout(STANDARD_WAIT_MILLIS))
                .sendBroadcast(
                .sendBroadcast(
                        MockitoHamcrest.argThat(AllOf.allOf(matchers)),
                        MockitoHamcrest.argThat(AllOf.allOf(matchers)),
                        anyString(),
                        anyString(),