blob: ff3c36ce4de7460fd6d78df39003229b3d21bad5 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.telephony;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.doReturn;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
public class SmsNumberUtilsTest extends TelephonyTest {
private static final String TMO_MCC_MNC = "310260";
private static final String TAIWAN_FET_MCC_MNC = "46602";
private static final String INDIA_AIRTEL_MCC_MNC = "40553";
private static final String JAPAN_NTTDOCOMO_MCC_MNC = "44020";
// Simulate partial packages/providers/TelephonyProvider/res/xml/hbpcd_lookup_tables.xml
private class HbpcdContentProvider extends MockContentProvider {
public HbpcdContentProvider() {}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
logd("HbpcdContentProvider: query");
logd(" uri = " + uri);
logd(" projection = " + Arrays.toString(projection));
logd(" selection = " + selection);
logd(" selectionArgs = " + Arrays.toString(selectionArgs));
logd(" sortOrder = " + sortOrder);
if (uri.compareTo(HbpcdLookup.MccIdd.CONTENT_URI) == 0) {
if (projection.length == 2 && projection[0].equals(HbpcdLookup.MccIdd.IDD) &&
projection[1].equals(HbpcdLookup.MccIdd.MCC) && selectionArgs.length == 1) {
MatrixCursor mc = new MatrixCursor(
new String[]{HbpcdLookup.MccIdd.IDD});
switch (Integer.parseInt(selectionArgs[0])) {
case 310:
mc.addRow(new Object[]{"011"}); // US IDD code
break;
case 466:
mc.addRow(new Object[]{"002"}); // Taiwan IDD code
break;
case 440:
mc.addRow(new Object[]{"010"}); // Japan IDD code
break;
case 405:
mc.addRow(new Object[]{"010"}); // India IDD code
break;
default:
logd("Unhandled MCC" + Integer.parseInt(selectionArgs[0]));
}
return mc;
} else {
logd("Unhandled IDD look up request.");
}
} else if (uri.compareTo(HbpcdLookup.MccLookup.CONTENT_URI) == 0) {
if (projection.length == 1 && projection[0].equals(
HbpcdLookup.MccLookup.COUNTRY_CODE) &&
selection == null && selectionArgs == null) {
MatrixCursor mccCursor = new MatrixCursor(
new String[]{HbpcdLookup.MccLookup.COUNTRY_CODE});
mccCursor.addRow(new Object[]{"1"});
mccCursor.addRow(new Object[]{"886"});
mccCursor.addRow(new Object[]{"81"});
mccCursor.addRow(new Object[]{"91"});
return mccCursor;
} else {
logd("Unhandled mcc look up request");
}
} else {
logd("Unknown URI: " + uri);
}
return null;
}
}
HbpcdContentProvider mHbpcdContentProvider;
@Before
public void setUp() throws Exception {
logd("SmsNumberUtilsTest +Setup!");
super.setUp(getClass().getSimpleName());
mHbpcdContentProvider = new HbpcdContentProvider();
doReturn(TMO_MCC_MNC).when(mTelephonyManager).getNetworkOperator();
((MockContentResolver) mContextFixture.getTestDouble().getContentResolver())
.addProvider(HbpcdLookup.MccIdd.CONTENT_URI.getAuthority(), mHbpcdContentProvider);
mContextFixture.getCarrierConfigBundle().
putBoolean(CarrierConfigManager.KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL,
true);
logd("SmsNumberUtilsTest -Setup!");
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
@SmallTest
public void testInvalidNumberConversion() {
assertEquals("123", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(), "123"));
}
@Test
@SmallTest
public void testNaPcCountryCodeAreaLocalNumberConversion() {
// NP_NANP_NBPCD_CC_AREA_LOCAL tests
doReturn(TelephonyManager.PHONE_TYPE_CDMA).when(mTelephonyManager).getPhoneType();
assertEquals("18583420022", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"+1-858-342-0022"));
}
@Test
@SmallTest
public void testPcCountryCodeAreaLocalNumberConversion() {
// NP_NBPCD_CC_AREA_LOCAL tests
assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"+886-7-1234567"));
}
@Test
@SmallTest
public void testIndiaPcCountryCodeAreaLocalNumberConversion() {
// NP_NBPCD_CC_AREA_LOCAL tests
doReturn(INDIA_AIRTEL_MCC_MNC).when(mTelephonyManager).getNetworkOperator();
assertEquals("0119172345678", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"+91-7-234-5678"));
}
@Test
@SmallTest
public void testPcHomeIddCountryCodeAreaLocalNumberConversion() {
// NP_NBPCD_HOMEIDD_CC_AREA_LOCAL tests
assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"+011886-7-1234567"));
}
@Test
@SmallTest
public void testHomeIddCountryCodeAreaLocalNumberConversion() {
// NP_HOMEIDD_CC_AREA_LOCAL tests
assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"011886-7-1234567"));
}
@Test
@SmallTest
public void testLocalIddCountryCodeAreaLocalNumberConversion() {
// NP_LOCALIDD_CC_AREA_LOCAL tests
doReturn(TAIWAN_FET_MCC_MNC).when(mTelephonyManager).getNetworkOperator();
assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"002-1-858-1234567"));
}
@Test
@SmallTest
public void testIndiaLocalIddCountryCodeAreaLocalNumberConversion() {
// NP_LOCALIDD_CC_AREA_LOCAL tests
doReturn(INDIA_AIRTEL_MCC_MNC).when(mTelephonyManager).getNetworkOperator();
assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"010-1-858-1234567"));
}
@Test
@SmallTest
public void testJapanLocalIddCountryCodeAreaLocalNumberConversion() {
// NP_LOCALIDD_CC_AREA_LOCAL tests
doReturn(JAPAN_NTTDOCOMO_MCC_MNC).when(mTelephonyManager).getNetworkOperator();
assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"010-1-858-1234567"));
}
@Test
@SmallTest
public void testCountryCodeAreaLocalNumberConversion() {
// NP_CC_AREA_LOCAL tests
assertEquals("011886286281234", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"886-2-86281234"));
}
@Test
@SmallTest
public void testNaLocalNumberConversion() {
// NP_NANP_LOCAL
assertEquals("2345678", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"234-5678"));
}
@Test
@SmallTest
public void testNaAreaLocalNumberConversion() {
// NP_NANP_AREA_LOCAL
assertEquals("8582345678", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"858-234-5678"));
}
@Test
@SmallTest
public void testNaNddAreaLocalNumberConversion() {
// NP_NANP_NDD_AREA_LOCAL
assertEquals("18582345678", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"1-858-234-5678"));
}
@Test
@SmallTest
public void testNaLocalIddCcAreaLocalNumberConversion() {
// NP_NANP_LOCALIDD_CC_AREA_LOCAL
assertEquals("+18582345678", SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(),
"011-1-858-234-5678"));
}
@Test
@SmallTest
public void testNaPcHomeIddCcAreaLocalNumberConversion() {
// NP_NANP_NBPCD_HOMEIDD_CC_AREA_LOCAL
assertEquals("01118582345678",
SmsNumberUtils.filterDestAddr(mContext, mPhone.getSubId(), "+011-1-858-234-5678"));
}
}