|
|
/**
|
|
|
* @license
|
|
|
* Copyright (C) 2018 The Libphonenumber Authors.
|
|
|
*
|
|
|
* 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.
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* @fileoverview Unit tests for the ShortNumberInfo.
|
|
|
*
|
|
|
* Note that these tests use the test metadata for PhoneNumberUtil related
|
|
|
* operations, but the real short number metadata for testing ShortNumberInfo
|
|
|
* specific operations. This is not intentional, but mirrors the current state
|
|
|
* of the Java test suite.
|
|
|
*
|
|
|
* @author James Wright
|
|
|
*/
|
|
|
goog.provide('i18n.phonenumbers.ShortNumberInfoTest');
|
|
|
goog.setTestOnly();
|
|
|
|
|
|
goog.require('goog.testing.jsunit');
|
|
|
goog.require('i18n.phonenumbers.PhoneNumber');
|
|
|
goog.require('i18n.phonenumbers.PhoneNumberUtil');
|
|
|
goog.require('i18n.phonenumbers.RegionCode');
|
|
|
goog.require('i18n.phonenumbers.ShortNumberInfo');
|
|
|
|
|
|
|
|
|
/** @type {i18n.phonenumbers.ShortNumberInfo} */
|
|
|
var shortInfo = i18n.phonenumbers.ShortNumberInfo.getInstance();
|
|
|
|
|
|
|
|
|
/** @type {i18n.phonenumbers.PhoneNumberUtil} */
|
|
|
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
|
|
|
|
|
|
var RegionCode = i18n.phonenumbers.RegionCode;
|
|
|
|
|
|
function testIsPossibleShortNumber() {
|
|
|
var possibleNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
possibleNumber.setCountryCode(33);
|
|
|
possibleNumber.setNationalNumber(123456);
|
|
|
assertTrue(shortInfo.isPossibleShortNumber(possibleNumber));
|
|
|
assertTrue(shortInfo.isPossibleShortNumberForRegion(
|
|
|
phoneUtil.parse('123456', RegionCode.FR), RegionCode.FR));
|
|
|
|
|
|
var impossibleNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
impossibleNumber.setCountryCode(33);
|
|
|
impossibleNumber.setNationalNumber(9);
|
|
|
assertFalse(shortInfo.isPossibleShortNumber(impossibleNumber));
|
|
|
|
|
|
// Note that GB and GG share the country calling code 44, and that this number
|
|
|
// is possible but not valid.
|
|
|
var impossibleUkNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
impossibleUkNumber.setCountryCode(44);
|
|
|
impossibleUkNumber.setNationalNumber(11001);
|
|
|
assertTrue(shortInfo.isPossibleShortNumber(impossibleUkNumber));
|
|
|
}
|
|
|
|
|
|
function testIsValidShortNumber() {
|
|
|
var shortNumber1 = new i18n.phonenumbers.PhoneNumber();
|
|
|
shortNumber1.setCountryCode(33);
|
|
|
shortNumber1.setNationalNumber(1010);
|
|
|
assertTrue(shortInfo.isValidShortNumber(shortNumber1));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('1010', RegionCode.FR), RegionCode.FR));
|
|
|
var shortNumber2 = new i18n.phonenumbers.PhoneNumber();
|
|
|
shortNumber2.setCountryCode(33);
|
|
|
shortNumber2.setNationalNumber(123456);
|
|
|
assertFalse(shortInfo.isValidShortNumber(shortNumber2));
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('123456', RegionCode.FR), RegionCode.FR));
|
|
|
|
|
|
// Note that GB and GG share the country calling code 44.
|
|
|
var shortNumber3 = new i18n.phonenumbers.PhoneNumber();
|
|
|
shortNumber3.setCountryCode(44);
|
|
|
shortNumber3.setNationalNumber(18001);
|
|
|
assertTrue(shortInfo.isValidShortNumber(shortNumber3));
|
|
|
}
|
|
|
|
|
|
function testIsCarrierSpecific() {
|
|
|
var carrierSpecificNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
carrierSpecificNumber.setCountryCode(1);
|
|
|
carrierSpecificNumber.setNationalNumber(33669);
|
|
|
assertTrue(shortInfo.isCarrierSpecific(carrierSpecificNumber));
|
|
|
assertTrue(shortInfo.isCarrierSpecificForRegion(
|
|
|
phoneUtil.parse('33669', RegionCode.US), RegionCode.US));
|
|
|
|
|
|
var notCarrierSpecificNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
notCarrierSpecificNumber.setCountryCode(1);
|
|
|
notCarrierSpecificNumber.setNationalNumber(911);
|
|
|
assertFalse(shortInfo.isCarrierSpecific(notCarrierSpecificNumber));
|
|
|
assertFalse(shortInfo.isCarrierSpecificForRegion(
|
|
|
phoneUtil.parse('911', RegionCode.US), RegionCode.US));
|
|
|
|
|
|
var carrierSpecificNumberForSomeRegion = new i18n.phonenumbers.PhoneNumber();
|
|
|
carrierSpecificNumberForSomeRegion.setCountryCode(1);
|
|
|
carrierSpecificNumberForSomeRegion.setNationalNumber(211);
|
|
|
assertTrue(shortInfo.isCarrierSpecific(carrierSpecificNumberForSomeRegion));
|
|
|
assertTrue(shortInfo.isCarrierSpecificForRegion(
|
|
|
carrierSpecificNumberForSomeRegion, RegionCode.US));
|
|
|
assertFalse(shortInfo.isCarrierSpecificForRegion(
|
|
|
carrierSpecificNumberForSomeRegion, RegionCode.BB));
|
|
|
}
|
|
|
|
|
|
function testIsSmsService() {
|
|
|
var smsServiceNumberForSomeRegion = new i18n.phonenumbers.PhoneNumber();
|
|
|
smsServiceNumberForSomeRegion.setCountryCode(1);
|
|
|
smsServiceNumberForSomeRegion.setNationalNumber(21234);
|
|
|
assertTrue(shortInfo.isSmsServiceForRegion(
|
|
|
smsServiceNumberForSomeRegion, RegionCode.US));
|
|
|
assertFalse(shortInfo.isSmsServiceForRegion(
|
|
|
smsServiceNumberForSomeRegion, RegionCode.BB));
|
|
|
}
|
|
|
|
|
|
function testGetExpectedCost() {
|
|
|
var premiumRateExample = shortInfo.getExampleShortNumberForCost(
|
|
|
RegionCode.FR,
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE);
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(premiumRateExample, RegionCode.FR), RegionCode.FR));
|
|
|
var premiumRateNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
premiumRateNumber.setCountryCode(33);
|
|
|
premiumRateNumber.setNationalNumber(parseInt(premiumRateExample, 10));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
|
|
|
shortInfo.getExpectedCost(premiumRateNumber));
|
|
|
|
|
|
var standardRateExample = shortInfo.getExampleShortNumberForCost(
|
|
|
RegionCode.FR,
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE);
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(standardRateExample, RegionCode.FR), RegionCode.FR));
|
|
|
var standardRateNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
standardRateNumber.setCountryCode(33);
|
|
|
standardRateNumber.setNationalNumber(parseInt(standardRateExample, 10));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
|
|
|
shortInfo.getExpectedCost(standardRateNumber));
|
|
|
|
|
|
var tollFreeExample = shortInfo.getExampleShortNumberForCost(
|
|
|
RegionCode.FR,
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE);
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(tollFreeExample, RegionCode.FR), RegionCode.FR));
|
|
|
var tollFreeNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
tollFreeNumber.setCountryCode(33);
|
|
|
tollFreeNumber.setNationalNumber(parseInt(tollFreeExample, 10));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCost(tollFreeNumber));
|
|
|
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('12345', RegionCode.FR), RegionCode.FR));
|
|
|
var unknownCostNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
unknownCostNumber.setCountryCode(33);
|
|
|
unknownCostNumber.setNationalNumber(12345);
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCost(unknownCostNumber));
|
|
|
|
|
|
// Test that an invalid number may nevertheless have a cost other than
|
|
|
// UNKNOWN_COST.
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('116123', RegionCode.FR), RegionCode.FR));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('116123', RegionCode.FR), RegionCode.FR));
|
|
|
var invalidNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
invalidNumber.setCountryCode(33);
|
|
|
invalidNumber.setNationalNumber(116123);
|
|
|
assertFalse(shortInfo.isValidShortNumber(invalidNumber));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCost(invalidNumber));
|
|
|
|
|
|
// Test a nonexistent country code.
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('911', RegionCode.US), RegionCode.ZZ));
|
|
|
unknownCostNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
unknownCostNumber.setCountryCode(123);
|
|
|
unknownCostNumber.setNationalNumber(911);
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCost(unknownCostNumber));
|
|
|
}
|
|
|
|
|
|
function testGetExpectedCostForSharedCountryCallingCode() {
|
|
|
// Test some numbers which have different costs in countries sharing the same
|
|
|
// country calling code. In Australia, 1234 is premium-rate, 1194 is
|
|
|
// standard-rate, and 733 is toll-free. These are not known to be valid
|
|
|
// numbers in the Christmas Islands.
|
|
|
var ambiguousPremiumRateString = '1234';
|
|
|
var ambiguousPremiumRateNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
ambiguousPremiumRateNumber.setCountryCode(61);
|
|
|
ambiguousPremiumRateNumber.setNationalNumber(1234);
|
|
|
var ambiguousStandardRateString = '1194';
|
|
|
var ambiguousStandardRateNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
ambiguousStandardRateNumber.setCountryCode(61);
|
|
|
ambiguousStandardRateNumber.setNationalNumber(1194);
|
|
|
var ambiguousTollFreeString = '733';
|
|
|
var ambiguousTollFreeNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
ambiguousTollFreeNumber.setCountryCode(61);
|
|
|
ambiguousTollFreeNumber.setNationalNumber(733);
|
|
|
assertTrue(shortInfo.isValidShortNumber(ambiguousPremiumRateNumber));
|
|
|
assertTrue(shortInfo.isValidShortNumber(ambiguousStandardRateNumber));
|
|
|
assertTrue(shortInfo.isValidShortNumber(ambiguousTollFreeNumber));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousPremiumRateString, RegionCode.AU),
|
|
|
RegionCode.AU));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousPremiumRateString, RegionCode.AU),
|
|
|
RegionCode.AU));
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousPremiumRateString, RegionCode.CX),
|
|
|
RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousPremiumRateString, RegionCode.CX),
|
|
|
RegionCode.CX));
|
|
|
// PREMIUM_RATE takes precedence over UNKNOWN_COST.
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
|
|
|
shortInfo.getExpectedCost(ambiguousPremiumRateNumber));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousStandardRateString, RegionCode.AU),
|
|
|
RegionCode.AU));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousStandardRateString, RegionCode.AU),
|
|
|
RegionCode.AU));
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousStandardRateString, RegionCode.CX),
|
|
|
RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousStandardRateString, RegionCode.CX),
|
|
|
RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCost(ambiguousStandardRateNumber));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousTollFreeString, RegionCode.AU), RegionCode.AU));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousTollFreeString, RegionCode.AU),
|
|
|
RegionCode.AU));
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse(ambiguousTollFreeString, RegionCode.CX), RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse(ambiguousTollFreeString, RegionCode.CX),
|
|
|
RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCost(ambiguousTollFreeNumber));
|
|
|
}
|
|
|
|
|
|
function testExampleShortNumberPresence() {
|
|
|
assertNonEmptyString(shortInfo.getExampleShortNumber(RegionCode.AD));
|
|
|
assertNonEmptyString(shortInfo.getExampleShortNumber(RegionCode.FR));
|
|
|
assertEquals('', shortInfo.getExampleShortNumber(RegionCode.UN001));
|
|
|
assertEquals('', shortInfo.getExampleShortNumber(null));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumber_US() {
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('911', RegionCode.US));
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('112', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('999', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumberLongNumber_US() {
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('9116666666', RegionCode.US));
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('1126666666', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('9996666666', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumberWithFormatting_US() {
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('9-1-1', RegionCode.US));
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('1-1-2', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('9-9-9', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumberWithPlusSign_US() {
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('+911', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('\uFF0B911', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber(' +911', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('+112', RegionCode.US));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('+999', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumber_BR() {
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('911', RegionCode.BR));
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('190', RegionCode.BR));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('999', RegionCode.BR));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumberLongNumber_BR() {
|
|
|
// Brazilian emergency numbers don't work when additional digits are appended.
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('9111', RegionCode.BR));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('1900', RegionCode.BR));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('9996', RegionCode.BR));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumber_CL() {
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('131', RegionCode.CL));
|
|
|
assertTrue(shortInfo.connectsToEmergencyNumber('133', RegionCode.CL));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumberLongNumber_CL() {
|
|
|
// Chilean emergency numbers don't work when additional digits are appended.
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('1313', RegionCode.CL));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('1330', RegionCode.CL));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumber_AO() {
|
|
|
// Angola doesn't have any metadata for emergency numbers in the test
|
|
|
// metadata.
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('911', RegionCode.AO));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('222123456', RegionCode.AO));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('923123456', RegionCode.AO));
|
|
|
}
|
|
|
|
|
|
function testConnectsToEmergencyNumber_ZW() {
|
|
|
// Zimbabwe doesn't have any metadata in the test metadata.
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('911', RegionCode.ZW));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('01312345', RegionCode.ZW));
|
|
|
assertFalse(shortInfo.connectsToEmergencyNumber('0711234567', RegionCode.ZW));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumber_US() {
|
|
|
assertTrue(shortInfo.isEmergencyNumber('911', RegionCode.US));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('999', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumberLongNumber_US() {
|
|
|
assertFalse(shortInfo.isEmergencyNumber('9116666666', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('1126666666', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('9996666666', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumberWithFormatting_US() {
|
|
|
assertTrue(shortInfo.isEmergencyNumber('9-1-1', RegionCode.US));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('*911', RegionCode.US));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('1-1-2', RegionCode.US));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('*112', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('9-9-9', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('*999', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumberWithPlusSign_US() {
|
|
|
assertFalse(shortInfo.isEmergencyNumber('+911', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('\uFF0B911', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber(' +911', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('+112', RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('+999', RegionCode.US));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumber_BR() {
|
|
|
assertTrue(shortInfo.isEmergencyNumber('911', RegionCode.BR));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('190', RegionCode.BR));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('999', RegionCode.BR));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumberLongNumber_BR() {
|
|
|
assertFalse(shortInfo.isEmergencyNumber('9111', RegionCode.BR));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('1900', RegionCode.BR));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('9996', RegionCode.BR));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumber_AO() {
|
|
|
// Angola doesn't have any metadata for emergency numbers in the test
|
|
|
// metadata.
|
|
|
assertFalse(shortInfo.isEmergencyNumber('911', RegionCode.AO));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('222123456', RegionCode.AO));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('923123456', RegionCode.AO));
|
|
|
}
|
|
|
|
|
|
function testIsEmergencyNumber_ZW() {
|
|
|
// Zimbabwe doesn't have any metadata in the test metadata.
|
|
|
assertFalse(shortInfo.isEmergencyNumber('911', RegionCode.ZW));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('01312345', RegionCode.ZW));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('0711234567', RegionCode.ZW));
|
|
|
}
|
|
|
|
|
|
function testEmergencyNumberForSharedCountryCallingCode() {
|
|
|
// Test the emergency number 112, which is valid in both Australia and the
|
|
|
// Christmas Islands.
|
|
|
assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.AU));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('112', RegionCode.AU), RegionCode.AU));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('112', RegionCode.AU), RegionCode.AU));
|
|
|
assertTrue(shortInfo.isEmergencyNumber('112', RegionCode.CX));
|
|
|
assertTrue(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('112', RegionCode.CX), RegionCode.CX));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('112', RegionCode.CX), RegionCode.CX));
|
|
|
var sharedEmergencyNumber = new i18n.phonenumbers.PhoneNumber();
|
|
|
sharedEmergencyNumber.setCountryCode(61);
|
|
|
sharedEmergencyNumber.setNationalNumber(112);
|
|
|
assertTrue(shortInfo.isValidShortNumber(sharedEmergencyNumber));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCost(sharedEmergencyNumber));
|
|
|
}
|
|
|
|
|
|
function testOverlappingNANPANumber() {
|
|
|
// 211 is an emergency number in Barbados, while it is a toll-free information
|
|
|
// line in Canada and the USA.
|
|
|
assertTrue(shortInfo.isEmergencyNumber('211', RegionCode.BB));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('211', RegionCode.BB), RegionCode.BB));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('211', RegionCode.US));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('211', RegionCode.US), RegionCode.US));
|
|
|
assertFalse(shortInfo.isEmergencyNumber('211', RegionCode.CA));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.TOLL_FREE,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('211', RegionCode.CA), RegionCode.CA));
|
|
|
}
|
|
|
|
|
|
function testCountryCallingCodeIsNotIgnored() {
|
|
|
// +46 is the country calling code for Sweden (SE), and 40404 is a valid short
|
|
|
// number in the US.
|
|
|
assertFalse(shortInfo.isPossibleShortNumberForRegion(
|
|
|
phoneUtil.parse('+4640404', RegionCode.SE), RegionCode.US));
|
|
|
assertFalse(shortInfo.isValidShortNumberForRegion(
|
|
|
phoneUtil.parse('+4640404', RegionCode.SE), RegionCode.US));
|
|
|
assertEquals(
|
|
|
i18n.phonenumbers.ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
|
|
|
shortInfo.getExpectedCostForRegion(
|
|
|
phoneUtil.parse('+4640404', RegionCode.SE), RegionCode.US));
|
|
|
}
|