diff options
author | alk3pInjection <webmaster@raspii.tech> | 2023-04-20 00:08:54 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2023-04-20 00:08:54 +0800 |
commit | ea54f1de3b356393cdccb8ca477b6355c574d79e (patch) | |
tree | 1bb8d1e899d9a474e62c486006637f3c40d48db5 /tests/src | |
parent | f85a862dc1a8d05e6a3d1fd2ae21912ababe5a62 (diff) | |
parent | 410d56dbd95a1fa4cc03c6af76aaab2a940b661f (diff) |
Merge tag 'LA.QSSI.13.0.r1-09800-qssi.0' into tachibanatachibana
"LA.QSSI.13.0.r1-09800-qssi.0"
Change-Id: Ia1a3e02e4b17994e14ab1867ea9c3677a93e6a2f
Diffstat (limited to 'tests/src')
3 files changed, 215 insertions, 3 deletions
diff --git a/tests/src/com/android/TelephonyTestBase.java b/tests/src/com/android/TelephonyTestBase.java index 09abb15bca..ffda81b993 100644 --- a/tests/src/com/android/TelephonyTestBase.java +++ b/tests/src/com/android/TelephonyTestBase.java @@ -24,7 +24,9 @@ import android.util.Log; import com.android.internal.telephony.PhoneConfigurationManager; -import org.mockito.MockitoAnnotations; +import org.junit.Rule; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; @@ -34,11 +36,11 @@ import java.util.concurrent.TimeUnit; * Helper class to load Mockito Resources into a test. */ public class TelephonyTestBase { + @Rule public final MockitoRule mocks = MockitoJUnit.rule(); protected TestContext mContext; public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); mContext = spy(new TestContext()); // Set up the looper if it does not exist on the test thread. if (Looper.myLooper() == null) { diff --git a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java index fe5d013806..ffc0177453 100644 --- a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java +++ b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java @@ -16,6 +16,7 @@ package com.android.phone; +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -35,6 +36,9 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Locale; /** * Unit Test for CarrierConfigLoader. @@ -54,6 +58,7 @@ public class PhoneInterfaceManagerTest extends TelephonyTestBase { @UiThreadTest public void setUp() throws Exception { super.setUp(); + MockitoAnnotations.initMocks(this); doReturn(mPackageManager).when(mPhoneGlobals).getPackageManager(); doReturn(false).when(mPackageManager).hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS); @@ -83,4 +88,19 @@ public class PhoneInterfaceManagerTest extends TelephonyTestBase { verify(mPhone, never()).setAllowedNetworkTypes( TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER, defaultNetworkType, null); } + + @Test + public void matchLocaleFromSupportedLocaleList_inputLocaleChangeToSupportedLocale() { + // Input zh-TW, then look up the matched supported locale, zh-Hant-TW, instead. + String result1 = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList( + Locale.forLanguageTag("zh-TW")); + + assertEquals(result1, "zh-Hant-TW"); + + // Input ff-BF, then find the matched supported locale, ff-Latn-BF, instead. + String result2 = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList( + Locale.forLanguageTag("ff-BF")); + + assertEquals(result2, "ff-Latn-BF"); + } } diff --git a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java index 7f9efdccda..28a7b02af6 100644 --- a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java +++ b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java @@ -17,19 +17,104 @@ package com.android.services.telephony; import static android.media.ToneGenerator.TONE_PROP_PROMPT; +import static android.media.ToneGenerator.TONE_SUP_BUSY; import static junit.framework.Assert.assertNotNull; import static junit.framework.TestCase.assertEquals; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.PersistableBundle; +import android.telephony.CarrierConfigManager; import android.telephony.DisconnectCause; +import androidx.test.InstrumentationRegistry; 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 com.android.phone.common.R; + +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; + @RunWith(AndroidJUnit4.class) -public class DisconnectCauseUtilTest { +public class DisconnectCauseUtilTest extends TelephonyTestBase { + + // constants + public static final int PHONE_ID = 123; + public static final String EMPTY_STRING = ""; + + // dynamic + private Context mContext; + private HashMap<InstanceKey, Object> mOldInstances = new HashMap<InstanceKey, Object>(); + private ArrayList<InstanceKey> mInstanceKeys = new ArrayList<InstanceKey>(); + + //Mocks + @Mock + private GsmCdmaPhone mMockPhone; + + // inner classes + private static class InstanceKey { + public final Class mClass; + public final String mInstName; + public final Object mObj; + + InstanceKey(final Class c, final String instName, final Object obj) { + mClass = c; + mInstName = instName; + mObj = obj; + } + + @Override + public int hashCode() { + return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31; + } + + @Override + public boolean equals(Object obj) { + if (obj == null || !(obj instanceof InstanceKey)) { + return false; + } + + InstanceKey other = (InstanceKey) obj; + return (other.mClass == mClass && other.mInstName.equals(mInstName) + && other.mObj == mObj); + } + } + + @Before + public void setUp() throws Exception { + super.setUp(); + // objects that call static getInstance() + mMockPhone = Mockito.mock(GsmCdmaPhone.class); + mContext = InstrumentationRegistry.getTargetContext(); + // set mocks + setSinglePhone(); + } + + @After + public void tearDown() throws Exception { + // restoreInstance. + // Not doing so will potentially "confuse" other tests with the mocked instance + restoreInstance(PhoneFactory.class, "sPhones", null); + super.tearDown(); + } + + /** * Verifies that a call drop due to loss of WIFI results in a disconnect cause of error and that * the label, description and tone are all present. @@ -43,4 +128,109 @@ public class DisconnectCauseUtilTest { assertNotNull(tcCause.getDescription()); assertNotNull(tcCause.getReason()); } + + /** + * ensure the default behavior was not changed when a disconnect cause comes in as + * DisconnectCause.ERROR_UNSPECIFIED + */ + @Test + public void testDefaultDisconnectCauseBehaviorForCauseNotInCarrierBusyToneArray() { + android.telecom.DisconnectCause tcCause = DisconnectCauseUtil.toTelecomDisconnectCause( + DisconnectCause.ERROR_UNSPECIFIED, EMPTY_STRING, PHONE_ID); + // CODE + assertEquals(android.telecom.DisconnectCause.ERROR, tcCause.getCode()); + // LABEL + safeAssertLabel(null, tcCause); + // TONE + assertEquals(TONE_PROP_PROMPT, tcCause.getTone()); + } + + /** + * Simulate a Carrier classifying the DisconnectCause.ERROR_UNSPECIFIED as a + * DisconnectCause.BUSY. The code, label, and tone should match DisconnectCause.BUSY. + */ + @Test + public void testCarrierSetDisconnectCauseInBusyToneArray() { + int[] carrierBusyArr = {DisconnectCause.BUSY, DisconnectCause.ERROR_UNSPECIFIED}; + PersistableBundle config = new PersistableBundle(); + + config.putIntArray( + CarrierConfigManager.KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY, + carrierBusyArr); + + android.telecom.DisconnectCause tcCause = + DisconnectCauseUtil.toTelecomDisconnectCause( + DisconnectCause.ERROR_UNSPECIFIED, -1, + EMPTY_STRING, PHONE_ID, null, config); + + // CODE + assertEquals(android.telecom.DisconnectCause.BUSY, tcCause.getCode()); + // LABEL + safeAssertLabel(R.string.callFailed_userBusy, tcCause); + // TONE + assertEquals(TONE_SUP_BUSY, tcCause.getTone()); + } + + private void setSinglePhone() throws Exception { + Phone[] mPhones = new Phone[]{mMockPhone}; + replaceInstance(PhoneFactory.class, "sPhones", null, mPhones); + } + + + protected synchronized void replaceInstance(final Class c, final String instanceName, + final Object obj, final Object newValue) + throws Exception { + Field field = c.getDeclaredField(instanceName); + field.setAccessible(true); + + InstanceKey key = new InstanceKey(c, instanceName, obj); + if (!mOldInstances.containsKey(key)) { + mOldInstances.put(key, field.get(obj)); + mInstanceKeys.add(key); + } + field.set(obj, newValue); + } + + protected synchronized void restoreInstance(final Class c, final String instanceName, + final Object obj) throws Exception { + InstanceKey key = new InstanceKey(c, instanceName, obj); + if (mOldInstances.containsKey(key)) { + Field field = c.getDeclaredField(instanceName); + field.setAccessible(true); + field.set(obj, mOldInstances.get(key)); + mOldInstances.remove(key); + mInstanceKeys.remove(key); + } + } + + private Resources getResourcesForLocale(Context context, Locale locale) { + Configuration config = new Configuration(); + config.setToDefaults(); + config.setLocale(locale); + Context localeContext = context.createConfigurationContext(config); + return localeContext.getResources(); + } + + private void safeAssertLabel(Integer resourceId, + android.telecom.DisconnectCause disconnectCause) { + Resources r = getResourcesForLocale(mContext, Locale.US); + if (resourceId == null || r == null) { + return; + } + String label = r.getString(resourceId); + assertEquals(label, disconnectCause.getLabel()); + } + + /** + * Verifies that an ICC_ERROR disconnect cause generates a message which mentions there is no + * SIM. + */ + @Test + public void testIccError() { + android.telecom.DisconnectCause tcCause = DisconnectCauseUtil.toTelecomDisconnectCause( + DisconnectCause.ICC_ERROR); + assertEquals(android.telecom.DisconnectCause.ERROR, tcCause.getCode()); + assertNotNull(tcCause.getLabel()); + assertNotNull(tcCause.getDescription()); + } } |