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
This commit is contained in:
Jeremy Goldman
2021-02-24 13:19:50 +08:00
parent fb00d1c5b3
commit 804b9a4d46
2 changed files with 42 additions and 25 deletions

View File

@@ -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);
}
}

View File

@@ -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();
}
}