summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorCassie(Yitong) Wang <cassieyw@google.com>2019-03-22 17:33:15 -0700
committerCassie(Yitong) Wang <cassieyw@google.com>2019-06-19 15:15:47 -0700
commitf329542db9bf9bd7d84f7810bcd6509c3df6d272 (patch)
tree6b134cd2432b461feb3383e8bced9d5c09a3f884 /tests
parent7643b97bd6ef8cbec85b46f08c4b178640acb67a (diff)
downloadplatform_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.java180
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);
+ }
+}