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