JS: libphonenumber 3.7
[platform/upstream/libphonenumber.git] / javascript / i18n / phonenumbers / asyoutypeformatter_test.js
1 /**
2  * @license
3  * Copyright (C) 2010 Google Inc.
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 AsYouTypeFormatter.
20  *
21  * @author Nikolaos Trogkanis
22  */
23
24 goog.require('goog.testing.jsunit');
25 goog.require('i18n.phonenumbers.AsYouTypeFormatter');
26
27 function testInvalidRegion() {
28   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
29   var f = new i18n.phonenumbers.AsYouTypeFormatter('ZZ');
30   assertEquals('+', f.inputDigit('+'));
31   assertEquals('+4', f.inputDigit('4'));
32   assertEquals('+48 ', f.inputDigit('8'));
33   assertEquals('+48 8', f.inputDigit('8'));
34   assertEquals('+48 88', f.inputDigit('8'));
35   assertEquals('+48 88 1', f.inputDigit('1'));
36   assertEquals('+48 88 12', f.inputDigit('2'));
37   assertEquals('+48 88 123', f.inputDigit('3'));
38   assertEquals('+48 88 123 1', f.inputDigit('1'));
39   assertEquals('+48 88 123 12', f.inputDigit('2'));
40
41   f.clear();
42   assertEquals('6', f.inputDigit('6'));
43   assertEquals('65', f.inputDigit('5'));
44   assertEquals('650', f.inputDigit('0'));
45   assertEquals('6502', f.inputDigit('2'));
46   assertEquals('65025', f.inputDigit('5'));
47   assertEquals('650253', f.inputDigit('3'));
48 }
49
50 function testTooLongNumberMatchingMultipleLeadingDigits() {
51   // See http://code.google.com/p/libphonenumber/issues/detail?id=36
52   // The bug occurred last time for countries which have two formatting rules
53   // with exactly the same leading digits pattern but differ in length.
54   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
55   var f = new i18n.phonenumbers.AsYouTypeFormatter('ZZ');
56   assertEquals('+', f.inputDigit('+'));
57   assertEquals('+8', f.inputDigit('8'));
58   assertEquals('+81 ', f.inputDigit('1'));
59   assertEquals('+81 9', f.inputDigit('9'));
60   assertEquals('+81 90', f.inputDigit('0'));
61   assertEquals('+81 90 1', f.inputDigit('1'));
62   assertEquals('+81 90 12', f.inputDigit('2'));
63   assertEquals('+81 90 123', f.inputDigit('3'));
64   assertEquals('+81 90 1234', f.inputDigit('4'));
65   assertEquals('+81 90 1234 5', f.inputDigit('5'));
66   assertEquals('+81 90 1234 56', f.inputDigit('6'));
67   assertEquals('+81 90 1234 567', f.inputDigit('7'));
68   assertEquals('+81 90 1234 5678', f.inputDigit('8'));
69   assertEquals('+81 90 12 345 6789', f.inputDigit('9'));
70   assertEquals('+81901234567890', f.inputDigit('0'));
71 }
72
73 function testAYTFUS() {
74   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
75   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
76   assertEquals('6', f.inputDigit('6'));
77   assertEquals('65', f.inputDigit('5'));
78   assertEquals('650', f.inputDigit('0'));
79   assertEquals('650 2', f.inputDigit('2'));
80   assertEquals('650 25', f.inputDigit('5'));
81   assertEquals('650 253', f.inputDigit('3'));
82   // Note this is how a US local number (without area code) should be formatted.
83   assertEquals('650 2532', f.inputDigit('2'));
84   assertEquals('650 253 22', f.inputDigit('2'));
85   assertEquals('650 253 222', f.inputDigit('2'));
86   assertEquals('650 253 2222', f.inputDigit('2'));
87
88   f.clear();
89   assertEquals('1', f.inputDigit('1'));
90   assertEquals('16', f.inputDigit('6'));
91   assertEquals('1 65', f.inputDigit('5'));
92   assertEquals('1 650', f.inputDigit('0'));
93   assertEquals('1 650 2', f.inputDigit('2'));
94   assertEquals('1 650 25', f.inputDigit('5'));
95   assertEquals('1 650 253', f.inputDigit('3'));
96   assertEquals('1 650 253 2', f.inputDigit('2'));
97   assertEquals('1 650 253 22', f.inputDigit('2'));
98   assertEquals('1 650 253 222', f.inputDigit('2'));
99   assertEquals('1 650 253 2222', f.inputDigit('2'));
100
101   f.clear();
102   assertEquals('0', f.inputDigit('0'));
103   assertEquals('01', f.inputDigit('1'));
104   assertEquals('011 ', f.inputDigit('1'));
105   assertEquals('011 4', f.inputDigit('4'));
106   assertEquals('011 44 ', f.inputDigit('4'));
107   assertEquals('011 44 6', f.inputDigit('6'));
108   assertEquals('011 44 61', f.inputDigit('1'));
109   assertEquals('011 44 6 12', f.inputDigit('2'));
110   assertEquals('011 44 6 123', f.inputDigit('3'));
111   assertEquals('011 44 6 123 1', f.inputDigit('1'));
112   assertEquals('011 44 6 123 12', f.inputDigit('2'));
113   assertEquals('011 44 6 123 123', f.inputDigit('3'));
114   assertEquals('011 44 6 123 123 1', f.inputDigit('1'));
115   assertEquals('011 44 6 123 123 12', f.inputDigit('2'));
116   assertEquals('011 44 6 123 123 123', f.inputDigit('3'));
117
118   f.clear();
119   assertEquals('0', f.inputDigit('0'));
120   assertEquals('01', f.inputDigit('1'));
121   assertEquals('011 ', f.inputDigit('1'));
122   assertEquals('011 5', f.inputDigit('5'));
123   assertEquals('011 54 ', f.inputDigit('4'));
124   assertEquals('011 54 9', f.inputDigit('9'));
125   assertEquals('011 54 91', f.inputDigit('1'));
126   assertEquals('011 54 9 11', f.inputDigit('1'));
127   assertEquals('011 54 9 11 2', f.inputDigit('2'));
128   assertEquals('011 54 9 11 23', f.inputDigit('3'));
129   assertEquals('011 54 9 11 231', f.inputDigit('1'));
130   assertEquals('011 54 9 11 2312', f.inputDigit('2'));
131   assertEquals('011 54 9 11 2312 1', f.inputDigit('1'));
132   assertEquals('011 54 9 11 2312 12', f.inputDigit('2'));
133   assertEquals('011 54 9 11 2312 123', f.inputDigit('3'));
134   assertEquals('011 54 9 11 2312 1234', f.inputDigit('4'));
135
136   f.clear();
137   assertEquals('0', f.inputDigit('0'));
138   assertEquals('01', f.inputDigit('1'));
139   assertEquals('011 ', f.inputDigit('1'));
140   assertEquals('011 2', f.inputDigit('2'));
141   assertEquals('011 24', f.inputDigit('4'));
142   assertEquals('011 244 ', f.inputDigit('4'));
143   assertEquals('011 244 2', f.inputDigit('2'));
144   assertEquals('011 244 28', f.inputDigit('8'));
145   assertEquals('011 244 280', f.inputDigit('0'));
146   assertEquals('011 244 280 0', f.inputDigit('0'));
147   assertEquals('011 244 280 00', f.inputDigit('0'));
148   assertEquals('011 244 280 000', f.inputDigit('0'));
149   assertEquals('011 244 280 000 0', f.inputDigit('0'));
150   assertEquals('011 244 280 000 00', f.inputDigit('0'));
151   assertEquals('011 244 280 000 000', f.inputDigit('0'));
152
153   f.clear();
154   assertEquals('+', f.inputDigit('+'));
155   assertEquals('+4', f.inputDigit('4'));
156   assertEquals('+48 ', f.inputDigit('8'));
157   assertEquals('+48 8', f.inputDigit('8'));
158   assertEquals('+48 88', f.inputDigit('8'));
159   assertEquals('+48 88 1', f.inputDigit('1'));
160   assertEquals('+48 88 12', f.inputDigit('2'));
161   assertEquals('+48 88 123', f.inputDigit('3'));
162   assertEquals('+48 88 123 1', f.inputDigit('1'));
163   assertEquals('+48 88 123 12', f.inputDigit('2'));
164   assertEquals('+48 88 123 12 1', f.inputDigit('1'));
165   assertEquals('+48 88 123 12 12', f.inputDigit('2'));
166 }
167
168 function testAYTFUSFullWidthCharacters() {
169   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
170   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
171   assertEquals('\uFF16', f.inputDigit('\uFF16'));
172   assertEquals('\uFF16\uFF15', f.inputDigit('\uFF15'));
173   assertEquals('650', f.inputDigit('\uFF10'));
174   assertEquals('650 2', f.inputDigit('\uFF12'));
175   assertEquals('650 25', f.inputDigit('\uFF15'));
176   assertEquals('650 253', f.inputDigit('\uFF13'));
177   assertEquals('650 2532', f.inputDigit('\uFF12'));
178   assertEquals('650 253 22', f.inputDigit('\uFF12'));
179   assertEquals('650 253 222', f.inputDigit('\uFF12'));
180   assertEquals('650 253 2222', f.inputDigit('\uFF12'));
181 }
182
183 function testAYTFUSMobileShortCode() {
184   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
185   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
186   assertEquals('*', f.inputDigit('*'));
187   assertEquals('*1', f.inputDigit('1'));
188   assertEquals('*12', f.inputDigit('2'));
189   assertEquals('*121', f.inputDigit('1'));
190   assertEquals('*121#', f.inputDigit('#'));
191 }
192
193 function testAYTFUSVanityNumber() {
194   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
195   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
196   assertEquals('8', f.inputDigit('8'));
197   assertEquals('80', f.inputDigit('0'));
198   assertEquals('800', f.inputDigit('0'));
199   assertEquals('800 ', f.inputDigit(' '));
200   assertEquals('800 M', f.inputDigit('M'));
201   assertEquals('800 MY', f.inputDigit('Y'));
202   assertEquals('800 MY ', f.inputDigit(' '));
203   assertEquals('800 MY A', f.inputDigit('A'));
204   assertEquals('800 MY AP', f.inputDigit('P'));
205   assertEquals('800 MY APP', f.inputDigit('P'));
206   assertEquals('800 MY APPL', f.inputDigit('L'));
207   assertEquals('800 MY APPLE', f.inputDigit('E'));
208 }
209
210 function testAYTFAndRememberPositionUS() {
211   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
212   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
213   assertEquals('1', f.inputDigitAndRememberPosition('1'));
214   assertEquals(1, f.getRememberedPosition());
215   assertEquals('16', f.inputDigit('6'));
216   assertEquals('1 65', f.inputDigit('5'));
217   assertEquals(1, f.getRememberedPosition());
218   assertEquals('1 650', f.inputDigitAndRememberPosition('0'));
219   assertEquals(5, f.getRememberedPosition());
220   assertEquals('1 650 2', f.inputDigit('2'));
221   assertEquals('1 650 25', f.inputDigit('5'));
222   // Note the remembered position for digit '0' changes from 4 to 5, because a
223   // space is now inserted in the front.
224   assertEquals(5, f.getRememberedPosition());
225   assertEquals('1 650 253', f.inputDigit('3'));
226   assertEquals('1 650 253 2', f.inputDigit('2'));
227   assertEquals('1 650 253 22', f.inputDigit('2'));
228   assertEquals(5, f.getRememberedPosition());
229   assertEquals('1 650 253 222', f.inputDigitAndRememberPosition('2'));
230   assertEquals(13, f.getRememberedPosition());
231   assertEquals('1 650 253 2222', f.inputDigit('2'));
232   assertEquals(13, f.getRememberedPosition());
233   assertEquals('165025322222', f.inputDigit('2'));
234   assertEquals(10, f.getRememberedPosition());
235   assertEquals('1650253222222', f.inputDigit('2'));
236   assertEquals(10, f.getRememberedPosition());
237
238   f.clear();
239   assertEquals('1', f.inputDigit('1'));
240   assertEquals('16', f.inputDigitAndRememberPosition('6'));
241   assertEquals(2, f.getRememberedPosition());
242   assertEquals('1 65', f.inputDigit('5'));
243   assertEquals('1 650', f.inputDigit('0'));
244   assertEquals(3, f.getRememberedPosition());
245   assertEquals('1 650 2', f.inputDigit('2'));
246   assertEquals('1 650 25', f.inputDigit('5'));
247   assertEquals(3, f.getRememberedPosition());
248   assertEquals('1 650 253', f.inputDigit('3'));
249   assertEquals('1 650 253 2', f.inputDigit('2'));
250   assertEquals('1 650 253 22', f.inputDigit('2'));
251   assertEquals(3, f.getRememberedPosition());
252   assertEquals('1 650 253 222', f.inputDigit('2'));
253   assertEquals('1 650 253 2222', f.inputDigit('2'));
254   assertEquals('165025322222', f.inputDigit('2'));
255   assertEquals(2, f.getRememberedPosition());
256   assertEquals('1650253222222', f.inputDigit('2'));
257   assertEquals(2, f.getRememberedPosition());
258
259   f.clear();
260   assertEquals('6', f.inputDigit('6'));
261   assertEquals('65', f.inputDigit('5'));
262   assertEquals('650', f.inputDigit('0'));
263   assertEquals('650 2', f.inputDigit('2'));
264   assertEquals('650 25', f.inputDigit('5'));
265   assertEquals('650 253', f.inputDigit('3'));
266   assertEquals('650 2532', f.inputDigitAndRememberPosition('2'));
267   assertEquals(8, f.getRememberedPosition());
268   assertEquals('650 253 22', f.inputDigit('2'));
269   assertEquals(9, f.getRememberedPosition());
270   assertEquals('650 253 222', f.inputDigit('2'));
271   // No more formatting when semicolon is entered.
272   assertEquals('650253222;', f.inputDigit(';'));
273   assertEquals(7, f.getRememberedPosition());
274   assertEquals('650253222;2', f.inputDigit('2'));
275
276   f.clear();
277   assertEquals('6', f.inputDigit('6'));
278   assertEquals('65', f.inputDigit('5'));
279   assertEquals('650', f.inputDigit('0'));
280   // No more formatting when users choose to do their own formatting.
281   assertEquals('650-', f.inputDigit('-'));
282   assertEquals('650-2', f.inputDigitAndRememberPosition('2'));
283   assertEquals(5, f.getRememberedPosition());
284   assertEquals('650-25', f.inputDigit('5'));
285   assertEquals(5, f.getRememberedPosition());
286   assertEquals('650-253', f.inputDigit('3'));
287   assertEquals(5, f.getRememberedPosition());
288   assertEquals('650-253-', f.inputDigit('-'));
289   assertEquals('650-253-2', f.inputDigit('2'));
290   assertEquals('650-253-22', f.inputDigit('2'));
291   assertEquals('650-253-222', f.inputDigit('2'));
292   assertEquals('650-253-2222', f.inputDigit('2'));
293
294   f.clear();
295   assertEquals('0', f.inputDigit('0'));
296   assertEquals('01', f.inputDigit('1'));
297   assertEquals('011 ', f.inputDigit('1'));
298   assertEquals('011 4', f.inputDigitAndRememberPosition('4'));
299   assertEquals('011 48 ', f.inputDigit('8'));
300   assertEquals(5, f.getRememberedPosition());
301   assertEquals('011 48 8', f.inputDigit('8'));
302   assertEquals(5, f.getRememberedPosition());
303   assertEquals('011 48 88', f.inputDigit('8'));
304   assertEquals('011 48 88 1', f.inputDigit('1'));
305   assertEquals('011 48 88 12', f.inputDigit('2'));
306   assertEquals(5, f.getRememberedPosition());
307   assertEquals('011 48 88 123', f.inputDigit('3'));
308   assertEquals('011 48 88 123 1', f.inputDigit('1'));
309   assertEquals('011 48 88 123 12', f.inputDigit('2'));
310   assertEquals('011 48 88 123 12 1', f.inputDigit('1'));
311   assertEquals('011 48 88 123 12 12', f.inputDigit('2'));
312
313   f.clear();
314   assertEquals('+', f.inputDigit('+'));
315   assertEquals('+1', f.inputDigit('1'));
316   assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
317   assertEquals('+1 65', f.inputDigit('5'));
318   assertEquals('+1 650', f.inputDigit('0'));
319   assertEquals(4, f.getRememberedPosition());
320   assertEquals('+1 650 2', f.inputDigit('2'));
321   assertEquals(4, f.getRememberedPosition());
322   assertEquals('+1 650 25', f.inputDigit('5'));
323   assertEquals('+1 650 253', f.inputDigitAndRememberPosition('3'));
324   assertEquals('+1 650 253 2', f.inputDigit('2'));
325   assertEquals('+1 650 253 22', f.inputDigit('2'));
326   assertEquals('+1 650 253 222', f.inputDigit('2'));
327   assertEquals(10, f.getRememberedPosition());
328
329   f.clear();
330   assertEquals('+', f.inputDigit('+'));
331   assertEquals('+1', f.inputDigit('1'));
332   assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
333   assertEquals('+1 65', f.inputDigit('5'));
334   assertEquals('+1 650', f.inputDigit('0'));
335   assertEquals(4, f.getRememberedPosition());
336   assertEquals('+1 650 2', f.inputDigit('2'));
337   assertEquals(4, f.getRememberedPosition());
338   assertEquals('+1 650 25', f.inputDigit('5'));
339   assertEquals('+1 650 253', f.inputDigit('3'));
340   assertEquals('+1 650 253 2', f.inputDigit('2'));
341   assertEquals('+1 650 253 22', f.inputDigit('2'));
342   assertEquals('+1 650 253 222', f.inputDigit('2'));
343   assertEquals('+1650253222;', f.inputDigit(';'));
344   assertEquals(3, f.getRememberedPosition());
345 }
346
347 function testAYTFGBFixedLine() {
348   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
349   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
350   assertEquals('0', f.inputDigit('0'));
351   assertEquals('02', f.inputDigit('2'));
352   assertEquals('020', f.inputDigit('0'));
353   assertEquals('020 7', f.inputDigitAndRememberPosition('7'));
354   assertEquals(5, f.getRememberedPosition());
355   assertEquals('020 70', f.inputDigit('0'));
356   assertEquals('020 703', f.inputDigit('3'));
357   assertEquals(5, f.getRememberedPosition());
358   assertEquals('020 7031', f.inputDigit('1'));
359   assertEquals('020 7031 3', f.inputDigit('3'));
360   assertEquals('020 7031 30', f.inputDigit('0'));
361   assertEquals('020 7031 300', f.inputDigit('0'));
362   assertEquals('020 7031 3000', f.inputDigit('0'));
363 }
364
365 function testAYTFGBTollFree() {
366   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
367   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
368   assertEquals('0', f.inputDigit('0'));
369   assertEquals('08', f.inputDigit('8'));
370   assertEquals('080', f.inputDigit('0'));
371   assertEquals('080 7', f.inputDigit('7'));
372   assertEquals('080 70', f.inputDigit('0'));
373   assertEquals('080 703', f.inputDigit('3'));
374   assertEquals('080 7031', f.inputDigit('1'));
375   assertEquals('080 7031 3', f.inputDigit('3'));
376   assertEquals('080 7031 30', f.inputDigit('0'));
377   assertEquals('080 7031 300', f.inputDigit('0'));
378   assertEquals('080 7031 3000', f.inputDigit('0'));
379 }
380
381 function testAYTFGBPremiumRate() {
382   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
383   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
384   assertEquals('0', f.inputDigit('0'));
385   assertEquals('09', f.inputDigit('9'));
386   assertEquals('090', f.inputDigit('0'));
387   assertEquals('090 7', f.inputDigit('7'));
388   assertEquals('090 70', f.inputDigit('0'));
389   assertEquals('090 703', f.inputDigit('3'));
390   assertEquals('090 7031', f.inputDigit('1'));
391   assertEquals('090 7031 3', f.inputDigit('3'));
392   assertEquals('090 7031 30', f.inputDigit('0'));
393   assertEquals('090 7031 300', f.inputDigit('0'));
394   assertEquals('090 7031 3000', f.inputDigit('0'));
395 }
396
397 function testAYTFNZMobile() {
398   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
399   var f = new i18n.phonenumbers.AsYouTypeFormatter('NZ');
400   assertEquals('0', f.inputDigit('0'));
401   assertEquals('02', f.inputDigit('2'));
402   assertEquals('021', f.inputDigit('1'));
403   assertEquals('02-11', f.inputDigit('1'));
404   assertEquals('02-112', f.inputDigit('2'));
405   // Note the unittest is using fake metadata which might produce non-ideal
406   // results.
407   assertEquals('02-112 3', f.inputDigit('3'));
408   assertEquals('02-112 34', f.inputDigit('4'));
409   assertEquals('02-112 345', f.inputDigit('5'));
410   assertEquals('02-112 3456', f.inputDigit('6'));
411 }
412
413 function testAYTFDE() {
414   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
415   var f = new i18n.phonenumbers.AsYouTypeFormatter('DE');
416   assertEquals('0', f.inputDigit('0'));
417   assertEquals('03', f.inputDigit('3'));
418   assertEquals('030', f.inputDigit('0'));
419   assertEquals('030/1', f.inputDigit('1'));
420   assertEquals('030/12', f.inputDigit('2'));
421   assertEquals('030/123', f.inputDigit('3'));
422   assertEquals('030/1234', f.inputDigit('4'));
423
424   // 04134 1234
425   f.clear();
426   assertEquals('0', f.inputDigit('0'));
427   assertEquals('04', f.inputDigit('4'));
428   assertEquals('041', f.inputDigit('1'));
429   assertEquals('041 3', f.inputDigit('3'));
430   assertEquals('041 34', f.inputDigit('4'));
431   assertEquals('04134 1', f.inputDigit('1'));
432   assertEquals('04134 12', f.inputDigit('2'));
433   assertEquals('04134 123', f.inputDigit('3'));
434   assertEquals('04134 1234', f.inputDigit('4'));
435
436   // 08021 2345
437   f.clear();
438   assertEquals('0', f.inputDigit('0'));
439   assertEquals('08', f.inputDigit('8'));
440   assertEquals('080', f.inputDigit('0'));
441   assertEquals('080 2', f.inputDigit('2'));
442   assertEquals('080 21', f.inputDigit('1'));
443   assertEquals('08021 2', f.inputDigit('2'));
444   assertEquals('08021 23', f.inputDigit('3'));
445   assertEquals('08021 234', f.inputDigit('4'));
446   assertEquals('08021 2345', f.inputDigit('5'));
447
448   // 00 1 650 253 2250
449   f.clear();
450   assertEquals('0', f.inputDigit('0'));
451   assertEquals('00', f.inputDigit('0'));
452   assertEquals('00 1 ', f.inputDigit('1'));
453   assertEquals('00 1 6', f.inputDigit('6'));
454   assertEquals('00 1 65', f.inputDigit('5'));
455   assertEquals('00 1 650', f.inputDigit('0'));
456   assertEquals('00 1 650 2', f.inputDigit('2'));
457   assertEquals('00 1 650 25', f.inputDigit('5'));
458   assertEquals('00 1 650 253', f.inputDigit('3'));
459   assertEquals('00 1 650 253 2', f.inputDigit('2'));
460   assertEquals('00 1 650 253 22', f.inputDigit('2'));
461   assertEquals('00 1 650 253 222', f.inputDigit('2'));
462   assertEquals('00 1 650 253 2222', f.inputDigit('2'));
463 }
464
465 function testAYTFAR() {
466   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
467   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
468   assertEquals('0', f.inputDigit('0'));
469   assertEquals('01', f.inputDigit('1'));
470   assertEquals('011', f.inputDigit('1'));
471   assertEquals('011 7', f.inputDigit('7'));
472   assertEquals('011 70', f.inputDigit('0'));
473   assertEquals('011 703', f.inputDigit('3'));
474   assertEquals('011 7031', f.inputDigit('1'));
475   assertEquals('011 7031-3', f.inputDigit('3'));
476   assertEquals('011 7031-30', f.inputDigit('0'));
477   assertEquals('011 7031-300', f.inputDigit('0'));
478   assertEquals('011 7031-3000', f.inputDigit('0'));
479 }
480
481 function testAYTFARMobile() {
482   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
483   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
484   assertEquals('+', f.inputDigit('+'));
485   assertEquals('+5', f.inputDigit('5'));
486   assertEquals('+54 ', f.inputDigit('4'));
487   assertEquals('+54 9', f.inputDigit('9'));
488   assertEquals('+54 91', f.inputDigit('1'));
489   assertEquals('+54 9 11', f.inputDigit('1'));
490   assertEquals('+54 9 11 2', f.inputDigit('2'));
491   assertEquals('+54 9 11 23', f.inputDigit('3'));
492   assertEquals('+54 9 11 231', f.inputDigit('1'));
493   assertEquals('+54 9 11 2312', f.inputDigit('2'));
494   assertEquals('+54 9 11 2312 1', f.inputDigit('1'));
495   assertEquals('+54 9 11 2312 12', f.inputDigit('2'));
496   assertEquals('+54 9 11 2312 123', f.inputDigit('3'));
497   assertEquals('+54 9 11 2312 1234', f.inputDigit('4'));
498 }
499
500 function testAYTFKR() {
501   // +82 51 234 5678
502   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
503   var f = new i18n.phonenumbers.AsYouTypeFormatter('KR');
504   assertEquals('+', f.inputDigit('+'));
505   assertEquals('+8', f.inputDigit('8'));
506   assertEquals('+82 ', f.inputDigit('2'));
507   assertEquals('+82 5', f.inputDigit('5'));
508   assertEquals('+82 51', f.inputDigit('1'));
509   assertEquals('+82 51-2', f.inputDigit('2'));
510   assertEquals('+82 51-23', f.inputDigit('3'));
511   assertEquals('+82 51-234', f.inputDigit('4'));
512   assertEquals('+82 51-234-5', f.inputDigit('5'));
513   assertEquals('+82 51-234-56', f.inputDigit('6'));
514   assertEquals('+82 51-234-567', f.inputDigit('7'));
515   assertEquals('+82 51-234-5678', f.inputDigit('8'));
516
517   // +82 2 531 5678
518   f.clear();
519   assertEquals('+', f.inputDigit('+'));
520   assertEquals('+8', f.inputDigit('8'));
521   assertEquals('+82 ', f.inputDigit('2'));
522   assertEquals('+82 2', f.inputDigit('2'));
523   assertEquals('+82 25', f.inputDigit('5'));
524   assertEquals('+82 2-53', f.inputDigit('3'));
525   assertEquals('+82 2-531', f.inputDigit('1'));
526   assertEquals('+82 2-531-5', f.inputDigit('5'));
527   assertEquals('+82 2-531-56', f.inputDigit('6'));
528   assertEquals('+82 2-531-567', f.inputDigit('7'));
529   assertEquals('+82 2-531-5678', f.inputDigit('8'));
530
531   // +82 2 3665 5678
532   f.clear();
533   assertEquals('+', f.inputDigit('+'));
534   assertEquals('+8', f.inputDigit('8'));
535   assertEquals('+82 ', f.inputDigit('2'));
536   assertEquals('+82 2', f.inputDigit('2'));
537   assertEquals('+82 23', f.inputDigit('3'));
538   assertEquals('+82 2-36', f.inputDigit('6'));
539   assertEquals('+82 2-366', f.inputDigit('6'));
540   assertEquals('+82 2-3665', f.inputDigit('5'));
541   assertEquals('+82 2-3665-5', f.inputDigit('5'));
542   assertEquals('+82 2-3665-56', f.inputDigit('6'));
543   assertEquals('+82 2-3665-567', f.inputDigit('7'));
544   assertEquals('+82 2-3665-5678', f.inputDigit('8'));
545
546   // 02-114
547   f.clear();
548   assertEquals('0', f.inputDigit('0'));
549   assertEquals('02', f.inputDigit('2'));
550   assertEquals('021', f.inputDigit('1'));
551   assertEquals('02-11', f.inputDigit('1'));
552   assertEquals('02-114', f.inputDigit('4'));
553
554   // 02-1300
555   f.clear();
556   assertEquals('0', f.inputDigit('0'));
557   assertEquals('02', f.inputDigit('2'));
558   assertEquals('021', f.inputDigit('1'));
559   assertEquals('02-13', f.inputDigit('3'));
560   assertEquals('02-130', f.inputDigit('0'));
561   assertEquals('02-1300', f.inputDigit('0'));
562
563   // 011-456-7890
564   f.clear();
565   assertEquals('0', f.inputDigit('0'));
566   assertEquals('01', f.inputDigit('1'));
567   assertEquals('011', f.inputDigit('1'));
568   assertEquals('011-4', f.inputDigit('4'));
569   assertEquals('011-45', f.inputDigit('5'));
570   assertEquals('011-456', f.inputDigit('6'));
571   assertEquals('011-456-7', f.inputDigit('7'));
572   assertEquals('011-456-78', f.inputDigit('8'));
573   assertEquals('011-456-789', f.inputDigit('9'));
574   assertEquals('011-456-7890', f.inputDigit('0'));
575
576   // 011-9876-7890
577   f.clear();
578   assertEquals('0', f.inputDigit('0'));
579   assertEquals('01', f.inputDigit('1'));
580   assertEquals('011', f.inputDigit('1'));
581   assertEquals('011-9', f.inputDigit('9'));
582   assertEquals('011-98', f.inputDigit('8'));
583   assertEquals('011-987', f.inputDigit('7'));
584   assertEquals('011-9876', f.inputDigit('6'));
585   assertEquals('011-9876-7', f.inputDigit('7'));
586   assertEquals('011-9876-78', f.inputDigit('8'));
587   assertEquals('011-9876-789', f.inputDigit('9'));
588   assertEquals('011-9876-7890', f.inputDigit('0'));
589 }
590
591 function testAYTF_MX() {
592   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
593   var f = new i18n.phonenumbers.AsYouTypeFormatter('MX');
594
595   // +52 800 123 4567
596   assertEquals('+', f.inputDigit('+'));
597   assertEquals('+5', f.inputDigit('5'));
598   assertEquals('+52 ', f.inputDigit('2'));
599   assertEquals('+52 8', f.inputDigit('8'));
600   assertEquals('+52 80', f.inputDigit('0'));
601   assertEquals('+52 800', f.inputDigit('0'));
602   assertEquals('+52 800 1', f.inputDigit('1'));
603   assertEquals('+52 800 12', f.inputDigit('2'));
604   assertEquals('+52 800 123', f.inputDigit('3'));
605   assertEquals('+52 800 123 4', f.inputDigit('4'));
606   assertEquals('+52 800 123 45', f.inputDigit('5'));
607   assertEquals('+52 800 123 456', f.inputDigit('6'));
608   assertEquals('+52 800 123 4567', f.inputDigit('7'));
609
610   // +52 55 1234 5678
611   f.clear();
612   assertEquals('+', f.inputDigit('+'));
613   assertEquals('+5', f.inputDigit('5'));
614   assertEquals('+52 ', f.inputDigit('2'));
615   assertEquals('+52 5', f.inputDigit('5'));
616   assertEquals('+52 55', f.inputDigit('5'));
617   assertEquals('+52 55 1', f.inputDigit('1'));
618   assertEquals('+52 55 12', f.inputDigit('2'));
619   assertEquals('+52 55 123', f.inputDigit('3'));
620   assertEquals('+52 55 1234', f.inputDigit('4'));
621   assertEquals('+52 55 1234 5', f.inputDigit('5'));
622   assertEquals('+52 55 1234 56', f.inputDigit('6'));
623   assertEquals('+52 55 1234 567', f.inputDigit('7'));
624   assertEquals('+52 55 1234 5678', f.inputDigit('8'));
625
626   // +52 212 345 6789
627   f.clear();
628   assertEquals('+', f.inputDigit('+'));
629   assertEquals('+5', f.inputDigit('5'));
630   assertEquals('+52 ', f.inputDigit('2'));
631   assertEquals('+52 2', f.inputDigit('2'));
632   assertEquals('+52 21', f.inputDigit('1'));
633   assertEquals('+52 212', f.inputDigit('2'));
634   assertEquals('+52 212 3', f.inputDigit('3'));
635   assertEquals('+52 212 34', f.inputDigit('4'));
636   assertEquals('+52 212 345', f.inputDigit('5'));
637   assertEquals('+52 212 345 6', f.inputDigit('6'));
638   assertEquals('+52 212 345 67', f.inputDigit('7'));
639   assertEquals('+52 212 345 678', f.inputDigit('8'));
640   assertEquals('+52 212 345 6789', f.inputDigit('9'));
641
642   // +52 1 55 1234 5678
643   f.clear();
644   assertEquals('+', f.inputDigit('+'));
645   assertEquals('+5', f.inputDigit('5'));
646   assertEquals('+52 ', f.inputDigit('2'));
647   assertEquals('+52 1', f.inputDigit('1'));
648   assertEquals('+52 15', f.inputDigit('5'));
649   assertEquals('+52 1 55', f.inputDigit('5'));
650   assertEquals('+52 1 55 1', f.inputDigit('1'));
651   assertEquals('+52 1 55 12', f.inputDigit('2'));
652   assertEquals('+52 1 55 123', f.inputDigit('3'));
653   assertEquals('+52 1 55 1234', f.inputDigit('4'));
654   assertEquals('+52 1 55 1234 5', f.inputDigit('5'));
655   assertEquals('+52 1 55 1234 56', f.inputDigit('6'));
656   assertEquals('+52 1 55 1234 567', f.inputDigit('7'));
657   assertEquals('+52 1 55 1234 5678', f.inputDigit('8'));
658
659   // +52 1 541 234 5678
660   f.clear();
661   assertEquals('+', f.inputDigit('+'));
662   assertEquals('+5', f.inputDigit('5'));
663   assertEquals('+52 ', f.inputDigit('2'));
664   assertEquals('+52 1', f.inputDigit('1'));
665   assertEquals('+52 15', f.inputDigit('5'));
666   assertEquals('+52 1 54', f.inputDigit('4'));
667   assertEquals('+52 1 541', f.inputDigit('1'));
668   assertEquals('+52 1 541 2', f.inputDigit('2'));
669   assertEquals('+52 1 541 23', f.inputDigit('3'));
670   assertEquals('+52 1 541 234', f.inputDigit('4'));
671   assertEquals('+52 1 541 234 5', f.inputDigit('5'));
672   assertEquals('+52 1 541 234 56', f.inputDigit('6'));
673   assertEquals('+52 1 541 234 567', f.inputDigit('7'));
674   assertEquals('+52 1 541 234 5678', f.inputDigit('8'));
675 }
676
677 function testAYTFMultipleLeadingDigitPatterns() {
678   // +81 50 2345 6789
679   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
680   var f = new i18n.phonenumbers.AsYouTypeFormatter('JP');
681   assertEquals('+', f.inputDigit('+'));
682   assertEquals('+8', f.inputDigit('8'));
683   assertEquals('+81 ', f.inputDigit('1'));
684   assertEquals('+81 5', f.inputDigit('5'));
685   assertEquals('+81 50', f.inputDigit('0'));
686   assertEquals('+81 50 2', f.inputDigit('2'));
687   assertEquals('+81 50 23', f.inputDigit('3'));
688   assertEquals('+81 50 234', f.inputDigit('4'));
689   assertEquals('+81 50 2345', f.inputDigit('5'));
690   assertEquals('+81 50 2345 6', f.inputDigit('6'));
691   assertEquals('+81 50 2345 67', f.inputDigit('7'));
692   assertEquals('+81 50 2345 678', f.inputDigit('8'));
693   assertEquals('+81 50 2345 6789', f.inputDigit('9'));
694
695   // +81 222 12 5678
696   f.clear();
697   assertEquals('+', f.inputDigit('+'));
698   assertEquals('+8', f.inputDigit('8'));
699   assertEquals('+81 ', f.inputDigit('1'));
700   assertEquals('+81 2', f.inputDigit('2'));
701   assertEquals('+81 22', f.inputDigit('2'));
702   assertEquals('+81 22 2', f.inputDigit('2'));
703   assertEquals('+81 22 21', f.inputDigit('1'));
704   assertEquals('+81 2221 2', f.inputDigit('2'));
705   assertEquals('+81 222 12 5', f.inputDigit('5'));
706   assertEquals('+81 222 12 56', f.inputDigit('6'));
707   assertEquals('+81 222 12 567', f.inputDigit('7'));
708   assertEquals('+81 222 12 5678', f.inputDigit('8'));
709
710   // +81 3332 2 5678
711   f.clear();
712   assertEquals('+', f.inputDigit('+'));
713   assertEquals('+8', f.inputDigit('8'));
714   assertEquals('+81 ', f.inputDigit('1'));
715   assertEquals('+81 3', f.inputDigit('3'));
716   assertEquals('+81 33', f.inputDigit('3'));
717   assertEquals('+81 33 3', f.inputDigit('3'));
718   assertEquals('+81 3332', f.inputDigit('2'));
719   assertEquals('+81 3332 2', f.inputDigit('2'));
720   assertEquals('+81 3332 2 5', f.inputDigit('5'));
721   assertEquals('+81 3332 2 56', f.inputDigit('6'));
722   assertEquals('+81 3332 2 567', f.inputDigit('7'));
723   assertEquals('+81 3332 2 5678', f.inputDigit('8'));
724 }