• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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