Move PhoneFactory/PhoneGlobals static mocking to TelephonyTestBase
This primarily fixes omissions when initializing different static fields
of these classes, but also:
- not always calling super.setUp()
- unnecessary Looper creation (handled in setUp)
- unnecessary initMocks (handled by RunWith)
Bug: 365800992
Test: com.android.phone.PhoneUtilsTest
Test: com.android.phone.CarrierConfigLoaderTest
Test: com.android.phone.ImsStateCallbackControllerTest
Test: com.android.phone.NotificationMgrTest
Test: com.android.phone.PhoneGlobalsTest
Test: com.android.phone.satellite.entitlement.SatelliteEntitlementControllerTest
Test: com.android.services.telephony.DisconnectCauseUtilTest
Test: com.android.services.telephony.TelecomAccountRegistryTest
Test: com.android.phone.PhoneInterfaceManagerTest
Flag: TEST_ONLY
Change-Id: I2ec8186ece803a0fe163f9cd45c4afbad996675f
diff --git a/tests/src/com/android/TelephonyTestBase.java b/tests/src/com/android/TelephonyTestBase.java
index 2bc7bb9..3e74eb7 100644
--- a/tests/src/com/android/TelephonyTestBase.java
+++ b/tests/src/com/android/TelephonyTestBase.java
@@ -16,21 +16,38 @@
package com.android;
+import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.doReturn;
+import android.content.ContextWrapper;
+import android.content.res.Resources;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.telephony.GsmCdmaPhone;
+import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConfigurationManager;
+import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.data.DataConfigManager;
+import com.android.internal.telephony.data.DataNetworkController;
+import com.android.phone.PhoneGlobals;
+import com.android.phone.PhoneInterfaceManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
+import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.lang.reflect.Field;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -39,12 +56,15 @@
import java.util.concurrent.TimeUnit;
/**
- * Helper class to load Mockito Resources into a test.
+ * Helper class to load Mockito Resources into Telephony unit tests.
*/
public class TelephonyTestBase {
@Rule public final MockitoRule mocks = MockitoJUnit.rule();
protected TestContext mContext;
+ @Mock protected PhoneGlobals mPhoneGlobals;
+ @Mock protected GsmCdmaPhone mPhone;
+ @Mock protected DataNetworkController mDataNetworkController;
private final HashMap<InstanceKey, Object> mOldInstances = new HashMap<>();
private final LinkedList<InstanceKey> mInstanceKeys = new LinkedList<>();
@@ -55,7 +75,31 @@
Looper.prepare();
}
+ doCallRealMethod().when(mPhoneGlobals).getBaseContext();
+ doCallRealMethod().when(mPhoneGlobals).getResources();
+ doCallRealMethod().when(mPhone).getServiceState();
+
mContext = spy(new TestContext());
+ doReturn(mContext).when(mPhone).getContext();
+ replaceInstance(ContextWrapper.class, "mBase", mPhoneGlobals, mContext);
+
+ Resources resources = InstrumentationRegistry.getTargetContext().getResources();
+ assertNotNull(resources);
+ doReturn(resources).when(mContext).getResources();
+
+ replaceInstance(Handler.class, "mLooper", mPhone, Looper.myLooper());
+ replaceInstance(PhoneFactory.class, "sMadeDefaults", null, true);
+ replaceInstance(PhoneFactory.class, "sPhone", null, mPhone);
+ replaceInstance(PhoneFactory.class, "sPhones", null, new Phone[] {mPhone});
+ replaceInstance(PhoneGlobals.class, "sMe", null, mPhoneGlobals);
+
+ doReturn(mDataNetworkController).when(mPhone).getDataNetworkController();
+ doReturn(Collections.emptyList()).when(mDataNetworkController)
+ .getInternetDataDisallowedReasons();
+ doReturn(Mockito.mock(DataConfigManager.class)).when(mDataNetworkController)
+ .getDataConfigManager();
+
+ mPhoneGlobals.phoneMgr = Mockito.mock(PhoneInterfaceManager.class);
}
@After
diff --git a/tests/src/com/android/phone/CarrierConfigLoaderTest.java b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
index 99064dd..b670de5 100644
--- a/tests/src/com/android/phone/CarrierConfigLoaderTest.java
+++ b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
@@ -57,10 +57,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.TelephonyTestBase;
-import com.android.internal.telephony.GsmCdmaPhone;
import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
@@ -75,7 +72,6 @@
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -107,7 +103,6 @@
@Mock SharedPreferences mSharedPreferences;
@Mock TelephonyRegistryManager mTelephonyRegistryManager;
@Mock FeatureFlags mFeatureFlags;
- @Mock GsmCdmaPhone mMockPhone;
private TelephonyManager mTelephonyManager;
private CarrierConfigLoader mCarrierConfigLoader;
@@ -121,10 +116,6 @@
@Before
public void setUp() throws Exception {
super.setUp();
- MockitoAnnotations.initMocks(this);
- Phone[] mPhones = new Phone[]{mMockPhone};
- replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
- replaceInstance(PhoneFactory.class, "sMadeDefaults", null, true);
doReturn(Context.PERMISSION_ENFORCER_SERVICE).when(mContext).getSystemServiceName(
eq(PermissionEnforcer.class));
doReturn(mFakePermissionEnforcer).when(mContext).getSystemService(
diff --git a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
index 0e902a8..5521ac0 100644
--- a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
+++ b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
@@ -46,7 +46,6 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
-import android.os.Looper;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyRegistryManager;
import android.testing.TestableLooper;
@@ -70,7 +69,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -110,7 +108,6 @@
@Captor ArgumentCaptor<FeatureConnector.Listener<ImsManager>> mMmTelConnectorListenerSlot1;
@Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot0;
@Captor ArgumentCaptor<FeatureConnector.Listener<RcsFeatureManager>> mRcsConnectorListenerSlot1;
- @Mock private PhoneGlobals mPhone;
@Mock ImsStateCallbackController.PhoneFactoryProxy mPhoneFactoryProxy;
@Mock Phone mPhoneSlot0;
@Mock Phone mPhoneSlot1;
@@ -134,16 +131,16 @@
@Before
public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
+ super.setUp();
- when(mPhone.getMainExecutor()).thenReturn(mExecutor);
- when(mPhone.getSystemServiceName(eq(SubscriptionManager.class)))
+ when(mPhoneGlobals.getMainExecutor()).thenReturn(mExecutor);
+ when(mPhoneGlobals.getSystemServiceName(eq(SubscriptionManager.class)))
.thenReturn(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
- when(mPhone.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
+ when(mPhoneGlobals.getSystemService(eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE)))
.thenReturn(mSubscriptionManager);
- when(mPhone.getSystemServiceName(eq(TelephonyRegistryManager.class)))
+ when(mPhoneGlobals.getSystemServiceName(eq(TelephonyRegistryManager.class)))
.thenReturn(Context.TELEPHONY_REGISTRY_SERVICE);
- when(mPhone.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
+ when(mPhoneGlobals.getSystemService(eq(Context.TELEPHONY_REGISTRY_SERVICE)))
.thenReturn(mTelephonyRegistryManager);
when(mPhoneFactoryProxy.getPhone(eq(0))).thenReturn(mPhoneSlot0);
when(mPhoneFactoryProxy.getPhone(eq(1))).thenReturn(mPhoneSlot1);
@@ -937,9 +934,6 @@
}
private void createController(int slotCount) throws Exception {
- if (Looper.myLooper() == null) {
- Looper.prepare();
- }
makeFakeActiveSubIds(slotCount);
when(mMmTelFeatureFactory
@@ -956,7 +950,7 @@
.thenReturn(mRcsFeatureConnectorSlot1);
mImsStateCallbackController =
- new ImsStateCallbackController(mPhone, mHandlerThread.getLooper(),
+ new ImsStateCallbackController(mPhoneGlobals, mHandlerThread.getLooper(),
slotCount, mMmTelFeatureFactory, mRcsFeatureFactory, mImsResolver,
mFeatureFlags);
diff --git a/tests/src/com/android/phone/NotificationMgrTest.java b/tests/src/com/android/phone/NotificationMgrTest.java
index 2b0ff94..0c1f8a3 100644
--- a/tests/src/com/android/phone/NotificationMgrTest.java
+++ b/tests/src/com/android/phone/NotificationMgrTest.java
@@ -77,11 +77,8 @@
import com.android.TelephonyTestBase;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.SignalStrengthController;
-import com.android.internal.telephony.data.DataConfigManager;
-import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.data.DataSettingsManager;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -90,9 +87,7 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import java.util.Collections;
import java.util.concurrent.TimeUnit;
/**
@@ -111,13 +106,12 @@
private static final String MOBILE_NETWORK_SELECTION_CLASS = ".testClass";
private static final String CARRIER_NAME = "CoolCarrier";
- @Mock PhoneGlobals mApp;
+ PhoneGlobals mApp; // mPhoneGlobals alias
@Mock StatusBarManager mStatusBarManager;
@Mock UserManager mUserManager;
@Mock SubscriptionManager mSubscriptionManager;
@Mock TelecomManager mTelecomManager;
@Mock TelephonyManager mTelephonyManager;
- @Mock Phone mPhone;
@Mock SharedPreferences mSharedPreferences;
@Mock NotificationManager mNotificationManager;
@Mock SubscriptionInfo mSubscriptionInfo;
@@ -126,20 +120,16 @@
@Mock ServiceStateTracker mServiceStateTracker;
@Mock ServiceState mServiceState;
@Mock CarrierConfigManager mCarrierConfigManager;
- @Mock DataNetworkController mDataNetworkController;
@Mock DataSettingsManager mDataSettingsManager;
- @Mock DataConfigManager mDataConfigManager;
@Mock SignalStrengthController mSignalStrengthController;
- private Phone[] mPhones;
private NotificationMgr mNotificationMgr;
private TestableLooper mTestableLooper;
@Before
public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- mPhones = new Phone[]{mPhone};
- replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
+ super.setUp();
+ mApp = mPhoneGlobals;
when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
when(mPhone.getContext()).thenReturn(mMockedContext);
when(mMockedContext.getResources()).thenReturn(mResources);
@@ -152,10 +142,6 @@
when(mPhone.getServiceStateTracker()).thenReturn(mServiceStateTracker);
mServiceStateTracker.mSS = mServiceState;
when(mPhone.getSignalStrengthController()).thenReturn(mSignalStrengthController);
- when(mPhone.getDataNetworkController()).thenReturn(mDataNetworkController);
- when(mDataNetworkController.getInternetDataDisallowedReasons()).thenReturn(
- Collections.emptyList());
- when(mDataNetworkController.getDataConfigManager()).thenReturn(mDataConfigManager);
when(mPhone.getDataSettingsManager()).thenReturn(mDataSettingsManager);
when(mDataSettingsManager.isDataEnabledForReason(anyInt())).thenReturn(true);
when(mApp.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
diff --git a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
index 5ecf111..086412c 100644
--- a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
+++ b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
@@ -90,8 +90,6 @@
PhoneInterfaceManagerTest.class.getPackageName();
@Mock
- PhoneGlobals mPhoneGlobals;
- @Mock
Phone mPhone;
@Mock
FeatureFlags mFeatureFlags;
diff --git a/tests/src/com/android/phone/PhoneUtilsTest.java b/tests/src/com/android/phone/PhoneUtilsTest.java
index 3d7815c..2d3d065 100644
--- a/tests/src/com/android/phone/PhoneUtilsTest.java
+++ b/tests/src/com/android/phone/PhoneUtilsTest.java
@@ -30,15 +30,11 @@
import androidx.test.runner.AndroidJUnit4;
import com.android.TelephonyTestBase;
-import com.android.internal.telephony.GsmCdmaPhone;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
public class PhoneUtilsTest extends TelephonyTestBase {
@@ -46,8 +42,6 @@
private SubscriptionManager mMockSubscriptionManager;
@Mock
private SubscriptionInfo mMockSubscriptionInfo;
- @Mock
- private GsmCdmaPhone mMockPhone;
private final int mPhoneAccountHandleIdInteger = 123;
private final String mPhoneAccountHandleIdString = "123";
@@ -58,12 +52,10 @@
@Before
public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
+ super.setUp();
when(mMockSubscriptionManager.getActiveSubscriptionInfo(
eq(mPhoneAccountHandleIdInteger))).thenReturn(mMockSubscriptionInfo);
- when(mMockPhone.getSubId()).thenReturn(mPhoneAccountHandleIdInteger);
- Phone[] mPhones = new Phone[] {mMockPhone};
- replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
+ when(mPhone.getSubId()).thenReturn(mPhoneAccountHandleIdInteger);
}
@Test
@@ -74,7 +66,7 @@
@Test
public void testGetPhoneForPhoneAccountHandle() throws Exception {
- assertEquals(mMockPhone, PhoneUtils.getPhoneForPhoneAccountHandle(
+ assertEquals(mPhone, PhoneUtils.getPhoneForPhoneAccountHandle(
mPhoneAccountHandleTest));
}
diff --git a/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java b/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
index 11f982e..aa6e29c 100644
--- a/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
+++ b/tests/src/com/android/phone/satellite/entitlement/SatelliteEntitlementControllerTest.java
@@ -74,7 +74,6 @@
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -121,7 +120,6 @@
@Before
public void setUp() throws Exception {
super.setUp();
- MockitoAnnotations.initMocks(this);
replaceInstance(SubscriptionManagerService.class, "sInstance", null,
mMockSubscriptionManagerService);
diff --git a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
index 71a23e6..fe6d6f7 100644
--- a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
+++ b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
@@ -22,7 +22,6 @@
import static junit.framework.Assert.assertNotNull;
import static junit.framework.TestCase.assertEquals;
-import static org.mockito.Mockito.mock;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -38,15 +37,11 @@
import com.android.TelephonyTestBase;
import com.android.internal.telephony.CallFailCause;
-import com.android.internal.telephony.GsmCdmaPhone;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
import com.android.phone.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
import java.util.Locale;
@@ -57,13 +52,6 @@
public static final int PHONE_ID = 123;
public static final String EMPTY_STRING = "";
- // dynamic
- private Context mContext;
-
- //Mocks
- @Mock
- private GsmCdmaPhone mMockPhone;
-
private final FlagsAdapter mFeatureFlags = new FlagsAdapter(){
@Override
public boolean doNotOverridePreciseLabel() {
@@ -74,11 +62,6 @@
@Before
public void setUp() throws Exception {
super.setUp();
- // objects that call static getInstance()
- mMockPhone = mock(GsmCdmaPhone.class);
- mContext = InstrumentationRegistry.getTargetContext();
- // set mocks
- setSinglePhone();
}
/**
@@ -253,11 +236,6 @@
return config;
}
- private void setSinglePhone() throws Exception {
- Phone[] mPhones = new Phone[]{mMockPhone};
- replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
- }
-
private Resources getResourcesForLocale(Context context, Locale locale) {
Configuration config = new Configuration();
config.setToDefaults();
@@ -268,7 +246,7 @@
private void safeAssertLabel(Integer resourceId,
android.telecom.DisconnectCause disconnectCause) {
- Resources r = getResourcesForLocale(mContext, Locale.US);
+ Resources r = getResourcesForLocale(InstrumentationRegistry.getTargetContext(), Locale.US);
if (resourceId == null || r == null) {
return;
}
diff --git a/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java b/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
index a8a54f8..d0fc69d 100644
--- a/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
+++ b/tests/src/com/android/services/telephony/TelecomAccountRegistryTest.java
@@ -50,10 +50,8 @@
import com.android.TelephonyTestBase;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SimultaneousCallingTracker;
import com.android.internal.telephony.flags.Flags;
-import com.android.phone.PhoneGlobals;
import com.android.phone.PhoneInterfaceManager;
import com.android.phone.R;
@@ -65,7 +63,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -85,7 +82,6 @@
@Mock ImsManager mImsManager;
@Mock SubscriptionManager mSubscriptionManager;
@Mock ContentProvider mContentProvider;
- @Mock PhoneGlobals mPhoneGlobals;
@Mock Phone mPhone;
@Mock Resources mResources;
@Mock Drawable mDrawable;
@@ -98,18 +94,13 @@
private BroadcastReceiver mUserSwitchedAndConfigChangedReceiver;
private BroadcastReceiver mLocaleChangedBroadcastReceiver;
private ContentResolver mContentResolver;
- private Phone[] mPhones;
private TestableLooper mTestableLooper;
@Before
public void setUp() throws Exception {
super.setUp();
mSetFlagsRule.disableFlags(Flags.FLAG_DELAY_PHONE_ACCOUNT_REGISTRATION);
- MockitoAnnotations.initMocks(this);
- mPhones = new Phone[]{mPhone};
- replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
- replaceInstance(PhoneGlobals.class, "sMe", null, mPhoneGlobals);
replaceInstance(PhoneInterfaceManager.class, "sInstance", null, mPhoneInterfaceManager);
when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
when(mPhone.getContext()).thenReturn(mMockedContext);