1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.telephony; 18 19import android.database.Cursor; 20import android.database.MatrixCursor; 21import android.net.Uri; 22import android.telephony.TelephonyManager; 23import android.test.mock.MockContentProvider; 24import android.test.mock.MockContentResolver; 25import android.test.suitebuilder.annotation.SmallTest; 26 27import org.junit.After; 28import org.junit.Before; 29import org.junit.Test; 30 31import java.util.Arrays; 32 33import static org.junit.Assert.assertEquals; 34import static org.mockito.Matchers.anyInt; 35import static org.mockito.Mockito.doReturn; 36 37public class SmsNumberUtilsTest extends TelephonyTest { 38 39 private static final String TMO_MCC_MNC = "310260"; 40 private static final String TAIWAN_FET_MCC_MNC = "46602"; 41 private static final String INDIA_AIRTEL_MCC_MNC = "40553"; 42 private static final String JAPAN_NTTDOCOMO_MCC_MNC = "44020"; 43 44 45 // Simulate partial packages/providers/TelephonyProvider/res/xml/hbpcd_lookup_tables.xml 46 private class HbpcdContentProvider extends MockContentProvider { 47 48 public HbpcdContentProvider() {} 49 50 @Override 51 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 52 String sortOrder) { 53 logd("HbpcdContentProvider: query"); 54 logd(" uri = " + uri); 55 logd(" projection = " + Arrays.toString(projection)); 56 logd(" selection = " + selection); 57 logd(" selectionArgs = " + Arrays.toString(selectionArgs)); 58 logd(" sortOrder = " + sortOrder); 59 60 if (uri.compareTo(HbpcdLookup.MccIdd.CONTENT_URI) == 0) { 61 if (projection.length == 2 && projection[0].equals(HbpcdLookup.MccIdd.IDD) && 62 projection[1].equals(HbpcdLookup.MccIdd.MCC) && selectionArgs.length == 1) { 63 MatrixCursor mc = new MatrixCursor( 64 new String[]{HbpcdLookup.MccIdd.IDD}); 65 66 switch (Integer.parseInt(selectionArgs[0])) { 67 case 310: 68 mc.addRow(new Object[]{"011"}); // US IDD code 69 break; 70 case 466: 71 mc.addRow(new Object[]{"002"}); // Taiwan IDD code 72 break; 73 case 440: 74 mc.addRow(new Object[]{"010"}); // Japan IDD code 75 break; 76 case 405: 77 mc.addRow(new Object[]{"010"}); // India IDD code 78 break; 79 default: 80 logd("Unhandled MCC" + Integer.parseInt(selectionArgs[0])); 81 } 82 83 return mc; 84 } else { 85 logd("Unhandled IDD look up request."); 86 } 87 } else if (uri.compareTo(HbpcdLookup.MccLookup.CONTENT_URI) == 0) { 88 if (projection.length == 1 && projection[0].equals( 89 HbpcdLookup.MccLookup.COUNTRY_CODE) && 90 selection == null && selectionArgs == null) { 91 MatrixCursor mccCursor = new MatrixCursor( 92 new String[]{HbpcdLookup.MccLookup.COUNTRY_CODE}); 93 94 mccCursor.addRow(new Object[]{"1"}); 95 mccCursor.addRow(new Object[]{"886"}); 96 mccCursor.addRow(new Object[]{"81"}); 97 mccCursor.addRow(new Object[]{"91"}); 98 99 return mccCursor; 100 } else { 101 logd("Unhandled mcc look up request"); 102 } 103 104 } else { 105 logd("Unknown URI: " + uri); 106 } 107 108 return null; 109 } 110 } 111 112 HbpcdContentProvider mHbpcdContentProvider; 113 114 @Before 115 public void setUp() throws Exception { 116 logd("SmsNumberUtilsTest +Setup!"); 117 super.setUp(getClass().getSimpleName()); 118 119 mHbpcdContentProvider = new HbpcdContentProvider(); 120 121 doReturn(TMO_MCC_MNC).when(mTelephonyManager).getNetworkOperator(anyInt()); 122 123 ((MockContentResolver) mContextFixture.getTestDouble().getContentResolver()) 124 .addProvider(HbpcdLookup.MccIdd.CONTENT_URI.getAuthority(), mHbpcdContentProvider); 125 mContextFixture.putStringArrayResource( 126 com.android.internal.R.array.config_sms_convert_destination_number_support, 127 new String[]{"true"}); 128 129 logd("SmsNumberUtilsTest -Setup!"); 130 } 131 132 @After 133 public void tearDown() throws Exception { 134 super.tearDown(); 135 } 136 137 @Test 138 @SmallTest 139 public void testInvalidNumberConversion() { 140 assertEquals("123", SmsNumberUtils.filterDestAddr(mPhone, "123")); 141 } 142 143 @Test 144 @SmallTest 145 public void testNaPcCountryCodeAreaLocalNumberConversion() { 146 // NP_NANP_NBPCD_CC_AREA_LOCAL tests 147 doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); 148 assertEquals("18583420022", SmsNumberUtils.filterDestAddr(mPhone, "+1-858-342-0022")); 149 } 150 151 @Test 152 @SmallTest 153 public void testPcCountryCodeAreaLocalNumberConversion() { 154 // NP_NBPCD_CC_AREA_LOCAL tests 155 assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mPhone, "+886-7-1234567")); 156 } 157 158 @Test 159 @SmallTest 160 public void testIndiaPcCountryCodeAreaLocalNumberConversion() { 161 // NP_NBPCD_CC_AREA_LOCAL tests 162 doReturn(INDIA_AIRTEL_MCC_MNC).when(mTelephonyManager).getNetworkOperator(anyInt()); 163 assertEquals("0119172345678", SmsNumberUtils.filterDestAddr(mPhone, "+91-7-234-5678")); 164 } 165 166 @Test 167 @SmallTest 168 public void testPcHomeIddCountryCodeAreaLocalNumberConversion() { 169 // NP_NBPCD_HOMEIDD_CC_AREA_LOCAL tests 170 assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mPhone, "+011886-7-1234567")); 171 } 172 173 @Test 174 @SmallTest 175 public void testHomeIddCountryCodeAreaLocalNumberConversion() { 176 // NP_HOMEIDD_CC_AREA_LOCAL tests 177 assertEquals("01188671234567", SmsNumberUtils.filterDestAddr(mPhone, "011886-7-1234567")); 178 } 179 180 @Test 181 @SmallTest 182 public void testLocalIddCountryCodeAreaLocalNumberConversion() { 183 // NP_LOCALIDD_CC_AREA_LOCAL tests 184 doReturn(TAIWAN_FET_MCC_MNC).when(mTelephonyManager).getNetworkOperator(anyInt()); 185 assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mPhone, "002-1-858-1234567")); 186 } 187 188 @Test 189 @SmallTest 190 public void testIndiaLocalIddCountryCodeAreaLocalNumberConversion() { 191 // NP_LOCALIDD_CC_AREA_LOCAL tests 192 doReturn(INDIA_AIRTEL_MCC_MNC).when(mTelephonyManager).getNetworkOperator(anyInt()); 193 assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mPhone, "010-1-858-1234567")); 194 } 195 196 @Test 197 @SmallTest 198 public void testJapanLocalIddCountryCodeAreaLocalNumberConversion() { 199 // NP_LOCALIDD_CC_AREA_LOCAL tests 200 doReturn(JAPAN_NTTDOCOMO_MCC_MNC).when(mTelephonyManager).getNetworkOperator(anyInt()); 201 assertEquals("01118581234567", SmsNumberUtils.filterDestAddr(mPhone, "010-1-858-1234567")); 202 } 203 204 @Test 205 @SmallTest 206 public void testCountryCodeAreaLocalNumberConversion() { 207 // NP_CC_AREA_LOCAL tests 208 assertEquals("011886286281234", SmsNumberUtils.filterDestAddr(mPhone, "886-2-86281234")); 209 } 210 211 @Test 212 @SmallTest 213 public void testNaLocalNumberConversion() { 214 // NP_NANP_LOCAL 215 assertEquals("2345678", SmsNumberUtils.filterDestAddr(mPhone, "234-5678")); 216 } 217 218 @Test 219 @SmallTest 220 public void testNaAreaLocalNumberConversion() { 221 // NP_NANP_AREA_LOCAL 222 assertEquals("8582345678", SmsNumberUtils.filterDestAddr(mPhone, "858-234-5678")); 223 } 224 225 @Test 226 @SmallTest 227 public void testNaNddAreaLocalNumberConversion() { 228 // NP_NANP_NDD_AREA_LOCAL 229 assertEquals("18582345678", SmsNumberUtils.filterDestAddr(mPhone, "1-858-234-5678")); 230 } 231 232 @Test 233 @SmallTest 234 public void testNaLocalIddCcAreaLocalNumberConversion() { 235 // NP_NANP_LOCALIDD_CC_AREA_LOCAL 236 assertEquals("+18582345678", SmsNumberUtils.filterDestAddr(mPhone, "011-1-858-234-5678")); 237 } 238 239 @Test 240 @SmallTest 241 public void testNaPcHomeIddCcAreaLocalNumberConversion() { 242 // NP_NANP_NBPCD_HOMEIDD_CC_AREA_LOCAL 243 assertEquals("01118582345678", 244 SmsNumberUtils.filterDestAddr(mPhone, "+011-1-858-234-5678")); 245 } 246}