diff options
author | Cassie(Yitong) Wang <cassieyw@google.com> | 2019-03-22 17:33:15 -0700 |
---|---|---|
committer | Cassie(Yitong) Wang <cassieyw@google.com> | 2019-06-19 15:15:47 -0700 |
commit | f329542db9bf9bd7d84f7810bcd6509c3df6d272 (patch) | |
tree | 6b134cd2432b461feb3383e8bced9d5c09a3f884 /tests | |
parent | 7643b97bd6ef8cbec85b46f08c4b178640acb67a (diff) | |
download | platform_packages_apps_Car_Dialer-f329542db9bf9bd7d84f7810bcd6509c3df6d272.tar.gz platform_packages_apps_Car_Dialer-f329542db9bf9bd7d84f7810bcd6509c3df6d272.tar.bz2 platform_packages_apps_Car_Dialer-f329542db9bf9bd7d84f7810bcd6509c3df6d272.zip |
Add Unit Tests for InCallViewModel
Bug: 122473078
Test: Unit Test.
Change-Id: Ib63bd17cc7258f86a31e5c9266e7f5790ad93494
Diffstat (limited to 'tests')
-rw-r--r-- | tests/robotests/src/com/android/car/dialer/ui/activecall/InCallViewModelTest.java | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/tests/robotests/src/com/android/car/dialer/ui/activecall/InCallViewModelTest.java b/tests/robotests/src/com/android/car/dialer/ui/activecall/InCallViewModelTest.java new file mode 100644 index 00000000..7ff2e4af --- /dev/null +++ b/tests/robotests/src/com/android/car/dialer/ui/activecall/InCallViewModelTest.java @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.car.dialer.ui.activecall; + +import static com.google.common.truth.Truth.assertThat; + +import static org.junit.Assert.assertArrayEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import android.app.Application; +import android.content.Context; +import android.net.Uri; +import android.telecom.Call; +import android.telecom.CallAudioState; +import android.telecom.DisconnectCause; +import android.telecom.GatewayInfo; + +import androidx.core.util.Pair; + +import com.android.car.dialer.CarDialerRobolectricTestRunner; +import com.android.car.dialer.telecom.UiCallManager; +import com.android.car.telephony.common.CallDetail; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RunWith(CarDialerRobolectricTestRunner.class) +public class InCallViewModelTest { + private static final String NUMBER = "6505551234"; + private static final long CONNECT_TIME_MILLIS = 500000000; + private static final CharSequence LABEL = "DisconnectCause"; + private static final Uri GATEWAY_ADDRESS = Uri.fromParts("tel", NUMBER, null); + + private InCallViewModel mInCallViewModel; + private List<Call> mListForMockCalls; + @Mock + private UiCallManager mMockUiCallManager; + @Mock + private Call mMockActiveCall; + @Mock + private Call mMockDialingCall; + @Mock + private Call mMockHoldingCall; + @Mock + private Call.Details mMockDetails; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + Context context = RuntimeEnvironment.application; + + when(mMockActiveCall.getState()).thenReturn(Call.STATE_ACTIVE); + when(mMockDialingCall.getState()).thenReturn(Call.STATE_DIALING); + when(mMockHoldingCall.getState()).thenReturn(Call.STATE_HOLDING); + + // Set up call details + GatewayInfo gatewayInfo = new GatewayInfo("", GATEWAY_ADDRESS, GATEWAY_ADDRESS); + DisconnectCause disconnectCause = new DisconnectCause(1, LABEL, null, ""); + when(mMockDetails.getHandle()).thenReturn(GATEWAY_ADDRESS); + when(mMockDetails.getDisconnectCause()).thenReturn(disconnectCause); + when(mMockDetails.getGatewayInfo()).thenReturn(gatewayInfo); + when(mMockDetails.getConnectTimeMillis()).thenReturn(CONNECT_TIME_MILLIS); + + when(mMockDialingCall.getDetails()).thenReturn(mMockDetails); + + mListForMockCalls = new ArrayList<>(); + mListForMockCalls.add(mMockActiveCall); + mListForMockCalls.add(mMockDialingCall); + mListForMockCalls.add(mMockHoldingCall); + UiCallManager.set(mMockUiCallManager); + when(mMockUiCallManager.getCallList()).thenReturn(mListForMockCalls); + when(mMockUiCallManager.getAudioRoute()).thenReturn(CallAudioState.ROUTE_BLUETOOTH); + + mInCallViewModel = new InCallViewModel((Application) context); + mInCallViewModel.getCallList().observeForever(s -> { }); + mInCallViewModel.getPrimaryCall().observeForever(s -> { }); + mInCallViewModel.getPrimaryCallState().observeForever(s -> { }); + mInCallViewModel.getPrimaryCallDetail().observeForever(s -> { }); + mInCallViewModel.getCallStateAndConnectTime().observeForever(s -> { }); + mInCallViewModel.getAudioRoute().observeForever(s -> { }); + } + + @After + public void tearDown() { + UiCallManager.set(null); + } + + @Test + public void testGetCallList() { + List<Call> callListInOrder = + Arrays.asList(mMockDialingCall, mMockActiveCall, mMockHoldingCall); + List<Call> viewModelCallList = mInCallViewModel.getCallList().getValue(); + assertArrayEquals(callListInOrder.toArray(), viewModelCallList.toArray()); + } + + @Test + public void testGetPrimaryCall() { + assertThat(mInCallViewModel.getPrimaryCall().getValue()).isEqualTo(mMockDialingCall); + } + + @Test + public void testGetPrimaryCallState() { + assertThat(mInCallViewModel.getPrimaryCallState().getValue()).isEqualTo(Call.STATE_DIALING); + } + + @Test + public void testGetPrimaryCallDetail() { + CallDetail callDetail = mInCallViewModel.getPrimaryCallDetail().getValue(); + assertThat(callDetail.getNumber()).isEqualTo(NUMBER); + assertThat(callDetail.getConnectTimeMillis()).isEqualTo(CONNECT_TIME_MILLIS); + assertThat(callDetail.getDisconnectCause()).isEqualTo(LABEL); + assertThat(callDetail.getGatewayInfoOriginalAddress()).isEqualTo(GATEWAY_ADDRESS); + } + + @Test + public void testGetCallStateAndConnectTime() { + Pair<Integer, Long> pair = mInCallViewModel.getCallStateAndConnectTime().getValue(); + assertThat(pair.first).isEqualTo(Call.STATE_DIALING); + assertThat(pair.second).isEqualTo(CONNECT_TIME_MILLIS); + } + + @Test + public void testGetAudioRoute() { + assertThat(mInCallViewModel.getAudioRoute().getValue()) + .isEqualTo(CallAudioState.ROUTE_BLUETOOTH); + } + + @Test + public void testOnTelecomCallAdded_updateCallList() { + Call mockRingingCall = mock(Call.class); + when(mockRingingCall.getState()).thenReturn(Call.STATE_RINGING); + mListForMockCalls.add(mockRingingCall); + + mInCallViewModel.onTelecomCallAdded(mock(Call.class)); + + List<Call> callListInOrder = + Arrays.asList(mockRingingCall, mMockDialingCall, mMockActiveCall, mMockHoldingCall); + List<Call> viewModelCallList = mInCallViewModel.getCallList().getValue(); + assertArrayEquals(callListInOrder.toArray(), viewModelCallList.toArray()); + + assertThat(mInCallViewModel.getPrimaryCall().getValue()).isEqualTo(mockRingingCall); + } + + @Test + public void testOnTelecomCallRemoved_updateCallList() { + mListForMockCalls.remove(1); + + mInCallViewModel.onTelecomCallRemoved(mock(Call.class)); + + List<Call> callListInOrder = Arrays.asList(mMockActiveCall, mMockHoldingCall); + List<Call> viewModelCallList = mInCallViewModel.getCallList().getValue(); + assertArrayEquals(callListInOrder.toArray(), viewModelCallList.toArray()); + + assertThat(mInCallViewModel.getPrimaryCall().getValue()).isEqualTo(mMockActiveCall); + } +} |