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 @VisibleForTesting
SubscriptionInfo getSubscriptionInfo(int simSlot) { protected SubscriptionInfo getSubscriptionInfo(int simSlot) {
final List<SubscriptionInfo> subscriptionInfoList = final List<SubscriptionInfo> subscriptionInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList(); mSubscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfoList != null) { if (subscriptionInfoList != null) {
@@ -147,7 +147,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
} }
@VisibleForTesting @VisibleForTesting
CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) { protected CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext,
subscriptionInfo); subscriptionInfo);
return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default) return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
@@ -155,7 +155,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
} }
@VisibleForTesting @VisibleForTesting
Preference createNewPreference(Context context) { protected Preference createNewPreference(Context context) {
return new Preference(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 com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.os.Looper;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen; 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.core.BasePreferenceController;
import com.android.settings.testutils.ResourcesUtils;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(AndroidJUnit4.class)
public class PhoneNumberPreferenceControllerTest { public class PhoneNumberPreferenceControllerTest {
@Mock
private Preference mPreference; private Preference mPreference;
@Mock @Mock
private Preference mSecondPreference; private Preference mSecondPreference;
@@ -62,25 +67,34 @@ public class PhoneNumberPreferenceControllerTest {
private SubscriptionInfo mSubscriptionInfo; private SubscriptionInfo mSubscriptionInfo;
@Mock @Mock
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
@Mock
private PreferenceScreen mScreen; private PreferenceScreen mScreen;
private Context mContext; private Context mContext;
private PhoneNumberPreferenceController mController; private PhoneNumberPreferenceController mController;
private ClipboardManager mClipboardManager;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); 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(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
mController = spy(new PhoneNumberPreferenceController(mContext, "phone_number")); mController = spy(new PhoneNumberPreferenceController(mContext, "phone_number"));
final String prefKey = mController.getPreferenceKey();
when(mScreen.findPreference(prefKey)).thenReturn(mPreference); if (Looper.myLooper() == null) {
when(mScreen.getContext()).thenReturn(mContext); 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(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
doReturn(mSecondPreference).when(mController).createNewPreference(mContext); doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
when(mPreference.isVisible()).thenReturn(true);
} }
@Test @Test
@@ -105,7 +119,7 @@ public class PhoneNumberPreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
verify(mScreen).addPreference(mSecondPreference); assertThat(mScreen.getPreferenceCount()).isEqualTo(2);
} }
@Test @Test
@@ -117,7 +131,7 @@ public class PhoneNumberPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
verify(mPreference).setTitle(mContext.getString(R.string.status_number)); verify(mPreference).setTitle(ResourcesUtils.getResourcesString(mContext, "status_number"));
verify(mPreference).setSummary(phoneNumber); verify(mPreference).setSummary(phoneNumber);
} }
@@ -130,11 +144,11 @@ public class PhoneNumberPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
verify(mPreference).setTitle( verify(mPreference).setTitle(ResourcesUtils.getResourcesString(
mContext.getString(R.string.status_number_sim_slot, 1 /* sim slot */)); mContext, "status_number_sim_slot", 1 /* sim slot */));
verify(mPreference).setSummary(phoneNumber); verify(mPreference).setSummary(phoneNumber);
verify(mSecondPreference).setTitle( verify(mSecondPreference).setTitle(ResourcesUtils.getResourcesString(
mContext.getString(R.string.status_number_sim_slot, 2 /* sim slot */)); mContext, "status_number_sim_slot", 2 /* sim slot */));
verify(mSecondPreference).setSummary(phoneNumber); verify(mSecondPreference).setSummary(phoneNumber);
} }
@@ -145,7 +159,8 @@ public class PhoneNumberPreferenceControllerTest {
CharSequence primaryNumber = mController.getSummary(); CharSequence primaryNumber = mController.getSummary();
assertThat(primaryNumber).isNotNull(); assertThat(primaryNumber).isNotNull();
assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default)); assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
mContext, "device_info_default"));
} }
@Test @Test
@@ -155,22 +170,24 @@ public class PhoneNumberPreferenceControllerTest {
CharSequence primaryNumber = mController.getSummary(); CharSequence primaryNumber = mController.getSummary();
assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default)); assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
mContext, "device_info_default"));
} }
@Test @Test
@UiThreadTest
public void copy_shouldCopyPhoneNumberToClipboard() { public void copy_shouldCopyPhoneNumberToClipboard() {
final List<SubscriptionInfo> list = new ArrayList<>(); final List<SubscriptionInfo> list = new ArrayList<>();
list.add(mSubscriptionInfo); list.add(mSubscriptionInfo);
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(list); when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(list);
final String phoneNumber = "1111111111"; final String phoneNumber = "1111111111";
doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo); doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
mController.copy(); mController.copy();
final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService( final CharSequence data = captor.getValue().getItemAt(0).getText();
CLIPBOARD_SERVICE);
final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
assertThat(phoneNumber.contentEquals(data)).isTrue(); assertThat(phoneNumber.contentEquals(data)).isTrue();
} }
} }