1/** 2 * @license 3 * Copyright (C) 2018 The Libphonenumber Authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18/** 19 * @fileoverview Unit tests for the ShortNumberInfo. 20 * 21 * Note that these tests use the test metadata for PhoneNumberUtil related 22 * operations, but the real short number metadata for testing ShortNumberInfo 23 * specific operations. This is not intentional, but mirrors the current state 24 * of the Java test suite. 25 * 26 * @author James Wright 27 */ 28 29goog.require('goog.testing.jsunit'); 30goog.require('i18n.phonenumbers.PhoneNumber'); 31goog.require('i18n.phonenumbers.PhoneNumberUtil'); 32goog.require('i18n.phonenumbers.RegionCode'); 33goog.require('i18n.phonenumbers.ShortNumberInfo'); 34 35 36/** @type {i18n.phonenumbers.ShortNumberInfo} */ 37var shortInfo = i18n.phonenumbers.ShortNumberInfo.getInstance(); 38 39 40/** @type {i18n.phonenumbers.PhoneNumberUtil} */ 41var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance(); 42 43var RegionCode = i18n.phonenumbers.RegionCode; 44 45function testIsPossibleShortNumber() { 46 var possibleNumber = new i18n.phonenumbers.PhoneNumber(); 47 possibleNumber.setCountryCode(33); 48 possibleNumber.setNationalNumber(123456); 49 assertTrue(shortInfo.isPossibleShortNumber(possibleNumber)); 50 assertTrue(shortInfo.isPossibleShortNumberForRegion( 51 phoneUtil.parse('123456', RegionCode.FR), 52 RegionCode.FR)); 53 54 var impossibleNumber = new i18n.phonenumbers.PhoneNumber(); 55 impossibleNumber.setCountryCode(33); 56 impossibleNumber.setNationalNumber(9); 57 assertFalse(shortInfo.isPossibleShortNumber(impossibleNumber)); 58 59 // Note that GB and GG share the country calling code 44, and that this number 60 // is possible but not valid. 61 var impossibleUkNumber = new i18n.phonenumbers.PhoneNumber(); 62 impossibleUkNumber.setCountryCode(44); 63 impossibleUkNumber.setNationalNumber(11001); 64 assertTrue(shortInfo.isPossibleShortNumber(impossibleUkNumber)); 65} 66 67function testIsValidShortNumber() { 68 var shortNumber1 = new i18n.phonenumbers.PhoneNumber(); 69 shortNumber1.setCountryCode(33); 70 shortNumber1.setNationalNumber(1010); 71 assertTrue(shortInfo.isValidShortNumber(shortNumber1)); 72 assertTrue(shortInfo.isValidShortNumberForRegion( 73 phoneUtil.parse('1010', RegionCode.FR), 74 RegionCode.FR)); 75 var shortNumber2 = new i18n.phonenumbers.PhoneNumber(); 76 shortNumber2.setCountryCode(33); 77 shortNumber2.setNationalNumber(123456); 78 assertFalse(shortInfo.isValidShortNumber(shortNumber2)); 79 assertFalse(shortInfo.isValidShortNumberForRegion( 80 phoneUtil.parse('123456', RegionCode.FR), 81 RegionCode.FR)); 82 83 // Note that GB and GG share the country calling code 44. 84 var shortNumber3 = new i18n.phonenumbers.PhoneNumber(); 85 shortNumber3.setCountryCode(44); 86 shortNumber3.setNationalNumber(18001); 87 assertTrue(shortInfo.isValidShortNumber(shortNumber3)); 88} 89 90function testIsCarrierSpecific() { 91 var carrierSpecificNumber = new i18n.phonenumbers.PhoneNumber(); 92 carrierSpecificNumber.setCountryCode(1); 93 carrierSpecificNumber.setNationalNumber(33669); 94 assertTrue(shortInfo.isCarrierSpecific(carrierSpecificNumber)); 95 assertTrue(shortInfo.isCarrierSpecificForRegion( 96 phoneUtil.parse('33669', RegionCode.US), 97 RegionCode.US)); 98 99 var notCarrierSpecificNumber = new i18n.phonenumbers.PhoneNumber(); 100 notCarrierSpecificNumber.setCountryCode(1); 101 notCarrierSpecificNumber.setNationalNumber(911); 102 assertFalse(shortInfo.isCarrierSpecific(notCarrierSpecificNumber)); 103 assertFalse(shortInfo.isCarrierSpecificForRegion( 104 phoneUtil.parse('911', RegionCode.US), 105 RegionCode.US)); 106 107 var carrierSpecificNumberForSomeRegion = new i18n.phonenumbers.PhoneNumber(); 108 carrierSpecificNumberForSomeRegion.setCountryCode(1); 109 carrierSpecificNumberForSomeRegion.setNationalNumber(211); 110 assertTrue(shortInfo.isCarrierSpecific(carrierSpecificNumberForSomeRegion)); 111 assertTrue(shortInfo.isCarrierSpecificForRegion( 112 carrierSpecificNumberForSomeRegion, RegionCode.US)); 113 assertFalse(shortInfo.isCarrierSpecificForRegion( 114 carrierSpecificNumberForSomeRegion, RegionCode.BB)); 115} 116 117function testIsSmsService() { 118 var smsServiceNumberForSomeRegion = new i18n.phonenumbers.PhoneNumber(); 119 smsServiceNumberForSomeRegion.setCountryCode(1); 120 smsServiceNumberForSomeRegion.setNationalNumber(21234); 121 assertTrue(shortInfo.isSmsServiceForRegion(smsServiceNumberForSomeRegion, 122 RegionCode.US)); 123 assertFalse(shortInfo.isSmsServiceForRegion(smsServiceNumberForSomeRegion, 124 RegionCode.BB)); 125} 126 127function testGetExpectedCost() { 128 var premiumRateExample = shortInfo.getExampleShortNumberForCost(RegionCode.FR, 129 i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE); 130 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, 131 shortInfo.getExpectedCostForRegion( 132 phoneUtil.parse(premiumRateExample, RegionCode.FR), 133 RegionCode.FR)); 134 var premiumRateNumber = new i18n.phonenumbers.PhoneNumber(); 135 premiumRateNumber.setCountryCode(33); 136 premiumRateNumber.setNationalNumber(parseInt(premiumRateExample, 10)); 137 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, 138 shortInfo.getExpectedCost(premiumRateNumber)); 139 140 var standardRateExample = shortInfo.getExampleShortNumberForCost( 141 RegionCode.FR, 142 i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE); 143 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE, 144 shortInfo.getExpectedCostForRegion( 145 phoneUtil.parse(standardRateExample, RegionCode.FR), 146 RegionCode.FR)); 147 var standardRateNumber = new i18n.phonenumbers.PhoneNumber(); 148 standardRateNumber.setCountryCode(33); 149 standardRateNumber.setNationalNumber(parseInt(standardRateExample, 10)); 150 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE, 151 shortInfo.getExpectedCost(standardRateNumber)); 152 153 var tollFreeExample = shortInfo.getExampleShortNumberForCost(RegionCode.FR, 154 i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE); 155 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 156 shortInfo.getExpectedCostForRegion( 157 phoneUtil.parse(tollFreeExample, RegionCode.FR), 158 RegionCode.FR)); 159 var tollFreeNumber = new i18n.phonenumbers.PhoneNumber(); 160 tollFreeNumber.setCountryCode(33); 161 tollFreeNumber.setNationalNumber(parseInt(tollFreeExample, 10)); 162 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 163 shortInfo.getExpectedCost(tollFreeNumber)); 164 165 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 166 shortInfo.getExpectedCostForRegion( 167 phoneUtil.parse('12345', RegionCode.FR), 168 RegionCode.FR)); 169 var unknownCostNumber = new i18n.phonenumbers.PhoneNumber(); 170 unknownCostNumber.setCountryCode(33); 171 unknownCostNumber.setNationalNumber(12345); 172 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 173 shortInfo.getExpectedCost(unknownCostNumber)); 174 175 // Test that an invalid number may nevertheless have a cost other than 176 // UNKNOWN_COST. 177 assertFalse(shortInfo.isValidShortNumberForRegion( 178 phoneUtil.parse('116123', RegionCode.FR), 179 RegionCode.FR)); 180 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 181 shortInfo.getExpectedCostForRegion( 182 phoneUtil.parse('116123', RegionCode.FR), 183 RegionCode.FR)); 184 var invalidNumber = new i18n.phonenumbers.PhoneNumber(); 185 invalidNumber.setCountryCode(33); 186 invalidNumber.setNationalNumber(116123); 187 assertFalse(shortInfo.isValidShortNumber(invalidNumber)); 188 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 189 shortInfo.getExpectedCost(invalidNumber)); 190 191 // Test a nonexistent country code. 192 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 193 shortInfo.getExpectedCostForRegion(phoneUtil.parse('911', RegionCode.US), 194 RegionCode.ZZ)); 195 unknownCostNumber = new i18n.phonenumbers.PhoneNumber(); 196 unknownCostNumber.setCountryCode(123); 197 unknownCostNumber.setNationalNumber(911); 198 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 199 shortInfo.getExpectedCost(unknownCostNumber)); 200} 201 202function testGetExpectedCostForSharedCountryCallingCode() { 203 // Test some numbers which have different costs in countries sharing the same 204 // country calling code. In Australia, 1234 is premium-rate, 1194 is 205 // standard-rate, and 733 is toll-free. These are not known to be valid 206 // numbers in the Christmas Islands. 207 var ambiguousPremiumRateString = '1234'; 208 var ambiguousPremiumRateNumber = new i18n.phonenumbers.PhoneNumber(); 209 ambiguousPremiumRateNumber.setCountryCode(61); 210 ambiguousPremiumRateNumber.setNationalNumber(1234); 211 var ambiguousStandardRateString = '1194'; 212 var ambiguousStandardRateNumber = new i18n.phonenumbers.PhoneNumber(); 213 ambiguousStandardRateNumber.setCountryCode(61); 214 ambiguousStandardRateNumber.setNationalNumber(1194); 215 var ambiguousTollFreeString = '733'; 216 var ambiguousTollFreeNumber = new i18n.phonenumbers.PhoneNumber(); 217 ambiguousTollFreeNumber.setCountryCode(61); 218 ambiguousTollFreeNumber.setNationalNumber(733); 219 assertTrue(shortInfo.isValidShortNumber(ambiguousPremiumRateNumber)); 220 assertTrue(shortInfo.isValidShortNumber(ambiguousStandardRateNumber)); 221 assertTrue(shortInfo.isValidShortNumber(ambiguousTollFreeNumber)); 222 assertTrue(shortInfo.isValidShortNumberForRegion( 223 phoneUtil.parse(ambiguousPremiumRateString, RegionCode.AU), 224 RegionCode.AU)); 225 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, 226 shortInfo.getExpectedCostForRegion( 227 phoneUtil.parse(ambiguousPremiumRateString, RegionCode.AU), 228 RegionCode.AU)); 229 assertFalse(shortInfo.isValidShortNumberForRegion( 230 phoneUtil.parse(ambiguousPremiumRateString, RegionCode.CX), 231 RegionCode.CX)); 232 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 233 shortInfo.getExpectedCostForRegion( 234 phoneUtil.parse(ambiguousPremiumRateString, RegionCode.CX), 235 RegionCode.CX)); 236 // PREMIUM_RATE takes precedence over UNKNOWN_COST. 237 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, 238 shortInfo.getExpectedCost(ambiguousPremiumRateNumber)); 239 assertTrue(shortInfo.isValidShortNumberForRegion( 240 phoneUtil.parse(ambiguousStandardRateString, RegionCode.AU), 241 RegionCode.AU)); 242 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE, 243 shortInfo.getExpectedCostForRegion( 244 phoneUtil.parse(ambiguousStandardRateString, RegionCode.AU), 245 RegionCode.AU)); 246 assertFalse(shortInfo.isValidShortNumberForRegion( 247 phoneUtil.parse(ambiguousStandardRateString, RegionCode.CX), 248 RegionCode.CX)); 249 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 250 shortInfo.getExpectedCostForRegion( 251 phoneUtil.parse(ambiguousStandardRateString, RegionCode.CX), 252 RegionCode.CX)); 253 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 254 shortInfo.getExpectedCost(ambiguousStandardRateNumber)); 255 assertTrue(shortInfo.isValidShortNumberForRegion( 256 phoneUtil.parse(ambiguousTollFreeString, RegionCode.AU), 257 RegionCode.AU)); 258 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 259 shortInfo.getExpectedCostForRegion( 260 phoneUtil.parse(ambiguousTollFreeString, RegionCode.AU), 261 RegionCode.AU)); 262 assertFalse(shortInfo.isValidShortNumberForRegion( 263 phoneUtil.parse(ambiguousTollFreeString, RegionCode.CX), 264 RegionCode.CX)); 265 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 266 shortInfo.getExpectedCostForRegion( 267 phoneUtil.parse(ambiguousTollFreeString, RegionCode.CX), 268 RegionCode.CX)); 269 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 270 shortInfo.getExpectedCost(ambiguousTollFreeNumber)); 271} 272 273function testExampleShortNumberPresence() { 274 assertNonEmptyString(shortInfo.getExampleShortNumber(RegionCode.AD)); 275 assertNonEmptyString(shortInfo.getExampleShortNumber(RegionCode.FR)); 276 assertEquals('', shortInfo.getExampleShortNumber(RegionCode.UN001)); 277 assertEquals('', shortInfo.getExampleShortNumber(null)); 278} 279 280function testConnectsToEmergencyNumber_US() { 281 assertTrue(shortInfo.connectsToEmergencyNumber('911', RegionCode.US)); 282 assertTrue(shortInfo.connectsToEmergencyNumber('112', RegionCode.US)); 283 assertFalse(shortInfo.connectsToEmergencyNumber('999', RegionCode.US)); 284} 285 286function testConnectsToEmergencyNumberLongNumber_US() { 287 assertTrue(shortInfo.connectsToEmergencyNumber('9116666666', RegionCode.US)); 288 assertTrue(shortInfo.connectsToEmergencyNumber('1126666666', RegionCode.US)); 289 assertFalse(shortInfo.connectsToEmergencyNumber('9996666666', RegionCode.US)); 290} 291 292function testConnectsToEmergencyNumberWithFormatting_US() { 293 assertTrue(shortInfo.connectsToEmergencyNumber('9-1-1', RegionCode.US)); 294 assertTrue(shortInfo.connectsToEmergencyNumber('1-1-2', RegionCode.US)); 295 assertFalse(shortInfo.connectsToEmergencyNumber('9-9-9', RegionCode.US)); 296} 297 298function testConnectsToEmergencyNumberWithPlusSign_US() { 299 assertFalse(shortInfo.connectsToEmergencyNumber('+911', RegionCode.US)); 300 assertFalse(shortInfo.connectsToEmergencyNumber('\uFF0B911', RegionCode.US)); 301 assertFalse(shortInfo.connectsToEmergencyNumber(' +911', RegionCode.US)); 302 assertFalse(shortInfo.connectsToEmergencyNumber('+112', RegionCode.US)); 303 assertFalse(shortInfo.connectsToEmergencyNumber('+999', RegionCode.US)); 304} 305 306function testConnectsToEmergencyNumber_BR() { 307 assertTrue(shortInfo.connectsToEmergencyNumber('911', RegionCode.BR)); 308 assertTrue(shortInfo.connectsToEmergencyNumber('190', RegionCode.BR)); 309 assertFalse(shortInfo.connectsToEmergencyNumber('999', RegionCode.BR)); 310} 311 312function testConnectsToEmergencyNumberLongNumber_BR() { 313 // Brazilian emergency numbers don't work when additional digits are appended. 314 assertFalse(shortInfo.connectsToEmergencyNumber('9111', RegionCode.BR)); 315 assertFalse(shortInfo.connectsToEmergencyNumber('1900', RegionCode.BR)); 316 assertFalse(shortInfo.connectsToEmergencyNumber('9996', RegionCode.BR)); 317} 318 319function testConnectsToEmergencyNumber_CL() { 320 assertTrue(shortInfo.connectsToEmergencyNumber('131', RegionCode.CL)); 321 assertTrue(shortInfo.connectsToEmergencyNumber('133', RegionCode.CL)); 322} 323 324function testConnectsToEmergencyNumberLongNumber_CL() { 325 // Chilean emergency numbers don't work when additional digits are appended. 326 assertFalse(shortInfo.connectsToEmergencyNumber('1313', RegionCode.CL)); 327 assertFalse(shortInfo.connectsToEmergencyNumber('1330', RegionCode.CL)); 328} 329 330function testConnectsToEmergencyNumber_AO() { 331 // Angola doesn't have any metadata for emergency numbers in the test 332 // metadata. 333 assertFalse(shortInfo.connectsToEmergencyNumber('911', RegionCode.AO)); 334 assertFalse(shortInfo.connectsToEmergencyNumber('222123456', RegionCode.AO)); 335 assertFalse(shortInfo.connectsToEmergencyNumber('923123456', RegionCode.AO)); 336} 337 338function testConnectsToEmergencyNumber_ZW() { 339 // Zimbabwe doesn't have any metadata in the test metadata. 340 assertFalse(shortInfo.connectsToEmergencyNumber('911', RegionCode.ZW)); 341 assertFalse(shortInfo.connectsToEmergencyNumber('01312345', RegionCode.ZW)); 342 assertFalse(shortInfo.connectsToEmergencyNumber('0711234567', RegionCode.ZW)); 343} 344 345function testIsEmergencyNumber_US() { 346 assertTrue(shortInfo.isEmergencyNumber('911', RegionCode.US)); 347 assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.US)); 348 assertFalse(shortInfo.isEmergencyNumber('999', RegionCode.US)); 349} 350 351function testIsEmergencyNumberLongNumber_US() { 352 assertFalse(shortInfo.isEmergencyNumber('9116666666', RegionCode.US)); 353 assertFalse(shortInfo.isEmergencyNumber('1126666666', RegionCode.US)); 354 assertFalse(shortInfo.isEmergencyNumber('9996666666', RegionCode.US)); 355} 356 357function testIsEmergencyNumberWithFormatting_US() { 358 assertTrue(shortInfo.isEmergencyNumber('9-1-1', RegionCode.US)); 359 assertTrue(shortInfo.isEmergencyNumber('*911', RegionCode.US)); 360 assertTrue(shortInfo.isEmergencyNumber('1-1-2', RegionCode.US)); 361 assertTrue(shortInfo.isEmergencyNumber('*112', RegionCode.US)); 362 assertFalse(shortInfo.isEmergencyNumber('9-9-9', RegionCode.US)); 363 assertFalse(shortInfo.isEmergencyNumber('*999', RegionCode.US)); 364} 365 366function testIsEmergencyNumberWithPlusSign_US() { 367 assertFalse(shortInfo.isEmergencyNumber('+911', RegionCode.US)); 368 assertFalse(shortInfo.isEmergencyNumber('\uFF0B911', RegionCode.US)); 369 assertFalse(shortInfo.isEmergencyNumber(' +911', RegionCode.US)); 370 assertFalse(shortInfo.isEmergencyNumber('+112', RegionCode.US)); 371 assertFalse(shortInfo.isEmergencyNumber('+999', RegionCode.US)); 372} 373 374function testIsEmergencyNumber_BR() { 375 assertTrue(shortInfo.isEmergencyNumber('911', RegionCode.BR)); 376 assertTrue(shortInfo.isEmergencyNumber('190', RegionCode.BR)); 377 assertFalse(shortInfo.isEmergencyNumber('999', RegionCode.BR)); 378} 379 380function testIsEmergencyNumberLongNumber_BR() { 381 assertFalse(shortInfo.isEmergencyNumber('9111', RegionCode.BR)); 382 assertFalse(shortInfo.isEmergencyNumber('1900', RegionCode.BR)); 383 assertFalse(shortInfo.isEmergencyNumber('9996', RegionCode.BR)); 384} 385 386function testIsEmergencyNumber_AO() { 387 // Angola doesn't have any metadata for emergency numbers in the test 388 // metadata. 389 assertFalse(shortInfo.isEmergencyNumber('911', RegionCode.AO)); 390 assertFalse(shortInfo.isEmergencyNumber('222123456', RegionCode.AO)); 391 assertFalse(shortInfo.isEmergencyNumber('923123456', RegionCode.AO)); 392} 393 394function testIsEmergencyNumber_ZW() { 395 // Zimbabwe doesn't have any metadata in the test metadata. 396 assertFalse(shortInfo.isEmergencyNumber('911', RegionCode.ZW)); 397 assertFalse(shortInfo.isEmergencyNumber('01312345', RegionCode.ZW)); 398 assertFalse(shortInfo.isEmergencyNumber('0711234567', RegionCode.ZW)); 399} 400 401function testEmergencyNumberForSharedCountryCallingCode() { 402 // Test the emergency number 112, which is valid in both Australia and the 403 // Christmas Islands. 404 assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.AU)); 405 assertTrue(shortInfo.isValidShortNumberForRegion( 406 phoneUtil.parse('112', RegionCode.AU), 407 RegionCode.AU)); 408 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 409 shortInfo.getExpectedCostForRegion(phoneUtil.parse('112', RegionCode.AU), 410 RegionCode.AU)); 411 assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.CX)); 412 assertTrue(shortInfo.isValidShortNumberForRegion( 413 phoneUtil.parse('112', RegionCode.CX), 414 RegionCode.CX)); 415 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 416 shortInfo.getExpectedCostForRegion(phoneUtil.parse('112', RegionCode.CX), 417 RegionCode.CX)); 418 var sharedEmergencyNumber = new i18n.phonenumbers.PhoneNumber(); 419 sharedEmergencyNumber.setCountryCode(61); 420 sharedEmergencyNumber.setNationalNumber(112); 421 assertTrue(shortInfo.isValidShortNumber(sharedEmergencyNumber)); 422 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 423 shortInfo.getExpectedCost(sharedEmergencyNumber)); 424} 425 426function testOverlappingNANPANumber() { 427 // 211 is an emergency number in Barbados, while it is a toll-free information 428 // line in Canada and the USA. 429 assertTrue(shortInfo.isEmergencyNumber('211', RegionCode.BB)); 430 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 431 shortInfo.getExpectedCostForRegion(phoneUtil.parse('211', RegionCode.BB), 432 RegionCode.BB)); 433 assertFalse(shortInfo.isEmergencyNumber('211', RegionCode.US)); 434 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 435 shortInfo.getExpectedCostForRegion(phoneUtil.parse('211', RegionCode.US), 436 RegionCode.US)); 437 assertFalse(shortInfo.isEmergencyNumber('211', RegionCode.CA)); 438 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE, 439 shortInfo.getExpectedCostForRegion(phoneUtil.parse('211', RegionCode.CA), 440 RegionCode.CA)); 441} 442 443function testCountryCallingCodeIsNotIgnored() { 444 // +46 is the country calling code for Sweden (SE), and 40404 is a valid short 445 // number in the US. 446 assertFalse(shortInfo.isPossibleShortNumberForRegion( 447 phoneUtil.parse('+4640404', RegionCode.SE), 448 RegionCode.US)); 449 assertFalse(shortInfo.isValidShortNumberForRegion( 450 phoneUtil.parse('+4640404', RegionCode.SE), 451 RegionCode.US)); 452 assertEquals(i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, 453 shortInfo.getExpectedCostForRegion( 454 phoneUtil.parse('+4640404', RegionCode.SE), 455 RegionCode.US)); 456} 457