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

Commit 804b9a4d authored by Jeremy Goldman's avatar Jeremy Goldman
Browse files

PhoneNumberPreferenceControllerTest converted to JUnit

Actual preferenceScreen used rather than mock, since it is a final class
ArgumentCaptor used to get clip data text.

Test: atest -c PhoneNumberPreferenceControllerTest
Change-Id: Ib33be3bc7d9b506523be408a44f31417f0faa4c1
parent fb00d1c5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
    }

    @VisibleForTesting
    SubscriptionInfo getSubscriptionInfo(int simSlot) {
    protected SubscriptionInfo getSubscriptionInfo(int simSlot) {
        final List<SubscriptionInfo> subscriptionInfoList =
                mSubscriptionManager.getActiveSubscriptionInfoList();
        if (subscriptionInfoList != null) {
@@ -147,7 +147,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
    }

    @VisibleForTesting
    CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
    protected CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
        final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext,
                subscriptionInfo);
        return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
@@ -155,7 +155,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
    }

    @VisibleForTesting
    Preference createNewPreference(Context context) {
    protected Preference createNewPreference(Context context) {
        return new Preference(context);
    }
}
+39 −22
Original line number Diff line number Diff line
@@ -21,38 +21,43 @@ import static android.content.Context.CLIPBOARD_SERVICE;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
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.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Looper;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;

import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.ResourcesUtils;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.util.ArrayList;
import java.util.List;

@RunWith(RobolectricTestRunner.class)
@RunWith(AndroidJUnit4.class)
public class PhoneNumberPreferenceControllerTest {

    @Mock
    private Preference mPreference;
    @Mock
    private Preference mSecondPreference;
@@ -62,25 +67,34 @@ public class PhoneNumberPreferenceControllerTest {
    private SubscriptionInfo mSubscriptionInfo;
    @Mock
    private SubscriptionManager mSubscriptionManager;
    @Mock
    private PreferenceScreen mScreen;

    private Context mContext;
    private PhoneNumberPreferenceController mController;
    private ClipboardManager mClipboardManager;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        mContext = spy(ApplicationProvider.getApplicationContext());
        mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
        doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
        when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
        mController = spy(new PhoneNumberPreferenceController(mContext, "phone_number"));
        final String prefKey = mController.getPreferenceKey();
        when(mScreen.findPreference(prefKey)).thenReturn(mPreference);
        when(mScreen.getContext()).thenReturn(mContext);

        if (Looper.myLooper() == null) {
            Looper.prepare();
        }
        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
        mScreen = preferenceManager.createPreferenceScreen(mContext);
        mPreference = spy(new Preference(mContext));
        mPreference.setKey(mController.getPreferenceKey());
        mPreference.setVisible(true);
        mScreen.addPreference(mPreference);

        doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
        doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
        when(mPreference.isVisible()).thenReturn(true);
    }

    @Test
@@ -105,7 +119,7 @@ public class PhoneNumberPreferenceControllerTest {

        mController.displayPreference(mScreen);

        verify(mScreen).addPreference(mSecondPreference);
        assertThat(mScreen.getPreferenceCount()).isEqualTo(2);
    }

    @Test
@@ -117,7 +131,7 @@ public class PhoneNumberPreferenceControllerTest {

        mController.updateState(mPreference);

        verify(mPreference).setTitle(mContext.getString(R.string.status_number));
        verify(mPreference).setTitle(ResourcesUtils.getResourcesString(mContext, "status_number"));
        verify(mPreference).setSummary(phoneNumber);
    }

@@ -130,11 +144,11 @@ public class PhoneNumberPreferenceControllerTest {

        mController.updateState(mPreference);

        verify(mPreference).setTitle(
                mContext.getString(R.string.status_number_sim_slot, 1 /* sim slot */));
        verify(mPreference).setTitle(ResourcesUtils.getResourcesString(
                mContext, "status_number_sim_slot", 1 /* sim slot */));
        verify(mPreference).setSummary(phoneNumber);
        verify(mSecondPreference).setTitle(
                mContext.getString(R.string.status_number_sim_slot, 2 /* sim slot */));
        verify(mSecondPreference).setTitle(ResourcesUtils.getResourcesString(
                mContext, "status_number_sim_slot", 2 /* sim slot */));
        verify(mSecondPreference).setSummary(phoneNumber);
    }

@@ -145,7 +159,8 @@ public class PhoneNumberPreferenceControllerTest {
        CharSequence primaryNumber = mController.getSummary();

        assertThat(primaryNumber).isNotNull();
        assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default));
        assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
                mContext, "device_info_default"));
    }

    @Test
@@ -155,22 +170,24 @@ public class PhoneNumberPreferenceControllerTest {

        CharSequence primaryNumber = mController.getSummary();

        assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default));
        assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
                mContext, "device_info_default"));
    }

    @Test
    @UiThreadTest
    public void copy_shouldCopyPhoneNumberToClipboard() {
        final List<SubscriptionInfo> list = new ArrayList<>();
        list.add(mSubscriptionInfo);
        when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(list);
        final String phoneNumber = "1111111111";
        doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
        ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
        doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());

        mController.copy();

        final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(
                CLIPBOARD_SERVICE);
        final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
        final CharSequence data = captor.getValue().getItemAt(0).getText();
        assertThat(phoneNumber.contentEquals(data)).isTrue();
    }
}