diff --git a/tests/unit/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceControllerTest.java new file mode 100644 index 00000000000..98c71f59db0 --- /dev/null +++ b/tests/unit/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceControllerTest.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2020 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.settings.network.telephony.gsm; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.ProgressDialog; +import android.content.Context; +import android.os.PersistableBundle; +import android.telephony.CarrierConfigManager; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; + +import androidx.lifecycle.Lifecycle; +import androidx.preference.SwitchPreference; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +@RunWith(AndroidJUnit4.class) +public class AutoSelectPreferenceControllerTest { + private static final int SUB_ID = 2; + private static final String OPERATOR_NAME = "T-mobile"; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private TelephonyManager mTelephonyManager; + @Mock + private SubscriptionManager mSubscriptionManager; + @Mock + private CarrierConfigManager mCarrierConfigManager; + @Mock + private ProgressDialog mProgressDialog; + @Mock + private Lifecycle mLifecycle; + + private PersistableBundle mCarrierConfig; + private AutoSelectPreferenceController mController; + private SwitchPreference mSwitchPreference; + private Context mContext; + + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = spy(ApplicationProvider.getApplicationContext()); + + when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); + when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn( + mCarrierConfigManager); + when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager); + + mCarrierConfig = new PersistableBundle(); + mCarrierConfig.putBoolean(CarrierConfigManager.KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL, + true); + when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig); + + mSwitchPreference = new SwitchPreference(mContext); + mController = new AutoSelectPreferenceController(mContext, "auto_select"); + mController.mProgressDialog = mProgressDialog; + mController.mSwitchPreference = mSwitchPreference; + mController.init(mLifecycle, SUB_ID); + } + + @Test + public void setChecked_isChecked_showProgressDialog() { + when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( + TelephonyManager.NETWORK_SELECTION_MODE_AUTO); + + assertThat(mController.setChecked(true)).isFalse(); + + verify(mProgressDialog).show(); + verify(mTelephonyManager).setNetworkSelectionModeAutomatic(); + } + + @Test + public void updateState_isRoaming_enabled() { + when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(true); + + mController.updateState(mSwitchPreference); + + assertThat(mSwitchPreference.isEnabled()).isTrue(); + } + + @Test + public void updateState_notRoamingWithAutoSelectOn_disabled() { + when(mTelephonyManager.getServiceState().getRoaming()).thenReturn(false); + doReturn(OPERATOR_NAME).when(mTelephonyManager).getSimOperatorName(); + + mController.updateState(mSwitchPreference); + + assertThat(mSwitchPreference.isEnabled()).isFalse(); + assertThat(mSwitchPreference.getSummary()).isEqualTo( + resourceString("manual_mode_disallowed_summary", + mTelephonyManager.getSimOperatorName())); + } + + @Test + public void init_carrierConfigNull_shouldNotCrash() { + when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(null); + + // Should not crash + mController.init(mLifecycle, SUB_ID); + } + + public int resourceId(String type, String name) { + return mContext.getResources().getIdentifier(name, type, mContext.getPackageName()); + } + + public String resourceString(String name, Object value) { + return mContext.getResources().getString(resourceId("string", name), value); + } +} \ No newline at end of file diff --git a/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java new file mode 100644 index 00000000000..c204e0e9a9e --- /dev/null +++ b/tests/unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2020 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.settings.network.telephony.gsm; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.os.PersistableBundle; +import android.telephony.CarrierConfigManager; +import android.telephony.ServiceState; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; + +import androidx.lifecycle.Lifecycle; +import androidx.preference.Preference; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Arrays; + +@RunWith(AndroidJUnit4.class) +public class OpenNetworkSelectPagePreferenceControllerTest { + private static final int SUB_ID = 2; + private static final String OPERATOR_NAME = "T-mobile"; + + @Mock + private TelephonyManager mTelephonyManager; + @Mock + private SubscriptionManager mSubscriptionManager; + @Mock + private CarrierConfigManager mCarrierConfigManager; + @Mock + private ServiceState mServiceState; + @Mock + private SubscriptionInfo mSubscriptionInfo; + @Mock + private Lifecycle mLifecycle; + + private PersistableBundle mCarrierConfig; + private OpenNetworkSelectPagePreferenceController mController; + private Preference mPreference; + private Context mContext; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = spy(ApplicationProvider.getApplicationContext()); + + when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); + when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn( + mCarrierConfigManager); + when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager); + when(mTelephonyManager.getServiceState()).thenReturn(mServiceState); + + mCarrierConfig = new PersistableBundle(); + when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig); + + when(mSubscriptionInfo.getSubscriptionId()).thenReturn(SUB_ID); + when(mSubscriptionInfo.getCarrierName()).thenReturn(OPERATOR_NAME); + + when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn( + Arrays.asList(mSubscriptionInfo)); + when(mSubscriptionManager.getAccessibleSubscriptionInfoList()).thenReturn( + Arrays.asList(mSubscriptionInfo)); + + when(mTelephonyManager.getNetworkOperatorName()).thenReturn(OPERATOR_NAME); + + mPreference = new Preference(mContext); + mController = new OpenNetworkSelectPagePreferenceController(mContext, + "open_network_select"); + mController.init(mLifecycle, SUB_ID); + } + + @Test + public void updateState_modeAuto_disabled() { + when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( + TelephonyManager.NETWORK_SELECTION_MODE_AUTO); + + mController.updateState(mPreference); + + assertThat(mPreference.isEnabled()).isFalse(); + } + + @Test + public void getSummary_inService_returnOperatorName() { + when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); + + assertThat(mController.getSummary()).isEqualTo(OPERATOR_NAME); + } + + @Test + public void getSummary_notInService_returnDisconnect() { + when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); + + assertThat(mController.getSummary()).isEqualTo(resourceString("network_disconnected")); + } + + public int resourceId(String type, String name) { + return mContext.getResources().getIdentifier(name, type, mContext.getPackageName()); + } + + public String resourceString(String name) { + return mContext.getResources().getString(resourceId("string", name)); + } +}