JS: libphonenumber v3.2. Patch contributed by tronikos.
[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 testAYTFUS() {
51   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
52   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
53   assertEquals('6', f.inputDigit('6'));
54   assertEquals('65', f.inputDigit('5'));
55   assertEquals('650', f.inputDigit('0'));
56   assertEquals('650 2', f.inputDigit('2'));
57   assertEquals('650 25', f.inputDigit('5'));
58   assertEquals('650 253', f.inputDigit('3'));
59   // Note this is how a US local number (without area code) should be formatted.
60   assertEquals('650 2532', f.inputDigit('2'));
61   assertEquals('650 253 22', f.inputDigit('2'));
62   assertEquals('650 253 222', f.inputDigit('2'));
63   assertEquals('650 253 2222', f.inputDigit('2'));
64
65   f.clear();
66   assertEquals('1', f.inputDigit('1'));
67   assertEquals('16', f.inputDigit('6'));
68   assertEquals('1 65', f.inputDigit('5'));
69   assertEquals('1 650', f.inputDigit('0'));
70   assertEquals('1 650 2', f.inputDigit('2'));
71   assertEquals('1 650 25', f.inputDigit('5'));
72   assertEquals('1 650 253', f.inputDigit('3'));
73   assertEquals('1 650 253 2', f.inputDigit('2'));
74   assertEquals('1 650 253 22', f.inputDigit('2'));
75   assertEquals('1 650 253 222', f.inputDigit('2'));
76   assertEquals('1 650 253 2222', f.inputDigit('2'));
77
78   f.clear();
79   assertEquals('0', f.inputDigit('0'));
80   assertEquals('01', f.inputDigit('1'));
81   assertEquals('011 ', f.inputDigit('1'));
82   assertEquals('011 4', f.inputDigit('4'));
83   assertEquals('011 44 ', f.inputDigit('4'));
84   assertEquals('011 44 6', f.inputDigit('6'));
85   assertEquals('011 44 61', f.inputDigit('1'));
86   assertEquals('011 44 6 12', f.inputDigit('2'));
87   assertEquals('011 44 6 123', f.inputDigit('3'));
88   assertEquals('011 44 6 123 1', f.inputDigit('1'));
89   assertEquals('011 44 6 123 12', f.inputDigit('2'));
90   assertEquals('011 44 6 123 123', f.inputDigit('3'));
91   assertEquals('011 44 6 123 123 1', f.inputDigit('1'));
92   assertEquals('011 44 6 123 123 12', f.inputDigit('2'));
93   assertEquals('011 44 6 123 123 123', f.inputDigit('3'));
94
95   f.clear();
96   assertEquals('0', f.inputDigit('0'));
97   assertEquals('01', f.inputDigit('1'));
98   assertEquals('011 ', f.inputDigit('1'));
99   assertEquals('011 5', f.inputDigit('5'));
100   assertEquals('011 54 ', f.inputDigit('4'));
101   assertEquals('011 54 9', f.inputDigit('9'));
102   assertEquals('011 54 91', f.inputDigit('1'));
103   assertEquals('011 54 9 11', f.inputDigit('1'));
104   assertEquals('011 54 9 11 2', f.inputDigit('2'));
105   assertEquals('011 54 9 11 23', f.inputDigit('3'));
106   assertEquals('011 54 9 11 231', f.inputDigit('1'));
107   assertEquals('011 54 9 11 2312', f.inputDigit('2'));
108   assertEquals('011 54 9 11 2312 1', f.inputDigit('1'));
109   assertEquals('011 54 9 11 2312 12', f.inputDigit('2'));
110   assertEquals('011 54 9 11 2312 123', f.inputDigit('3'));
111   assertEquals('011 54 9 11 2312 1234', f.inputDigit('4'));
112
113   f.clear();
114   assertEquals('0', f.inputDigit('0'));
115   assertEquals('01', f.inputDigit('1'));
116   assertEquals('011 ', f.inputDigit('1'));
117   assertEquals('011 2', f.inputDigit('2'));
118   assertEquals('011 24', f.inputDigit('4'));
119   assertEquals('011 244 ', f.inputDigit('4'));
120   assertEquals('011 244 2', f.inputDigit('2'));
121   assertEquals('011 244 28', f.inputDigit('8'));
122   assertEquals('011 244 280', f.inputDigit('0'));
123   assertEquals('011 244 280 0', f.inputDigit('0'));
124   assertEquals('011 244 280 00', f.inputDigit('0'));
125   assertEquals('011 244 280 000', f.inputDigit('0'));
126   assertEquals('011 244 280 000 0', f.inputDigit('0'));
127   assertEquals('011 244 280 000 00', f.inputDigit('0'));
128   assertEquals('011 244 280 000 000', f.inputDigit('0'));
129
130   f.clear();
131   assertEquals('+', f.inputDigit('+'));
132   assertEquals('+4', f.inputDigit('4'));
133   assertEquals('+48 ', f.inputDigit('8'));
134   assertEquals('+48 8', f.inputDigit('8'));
135   assertEquals('+48 88', f.inputDigit('8'));
136   assertEquals('+48 88 1', f.inputDigit('1'));
137   assertEquals('+48 88 12', f.inputDigit('2'));
138   assertEquals('+48 88 123', f.inputDigit('3'));
139   assertEquals('+48 88 123 1', f.inputDigit('1'));
140   assertEquals('+48 88 123 12', f.inputDigit('2'));
141   assertEquals('+48 88 123 12 1', f.inputDigit('1'));
142   assertEquals('+48 88 123 12 12', f.inputDigit('2'));
143 }
144
145 function testAYTFUSFullWidthCharacters() {
146   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
147   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
148   assertEquals('\uFF16', f.inputDigit('\uFF16'));
149   assertEquals('\uFF16\uFF15', f.inputDigit('\uFF15'));
150   assertEquals('650', f.inputDigit('\uFF10'));
151   assertEquals('650 2', f.inputDigit('\uFF12'));
152   assertEquals('650 25', f.inputDigit('\uFF15'));
153   assertEquals('650 253', f.inputDigit('\uFF13'));
154   assertEquals('650 2532', f.inputDigit('\uFF12'));
155   assertEquals('650 253 22', f.inputDigit('\uFF12'));
156   assertEquals('650 253 222', f.inputDigit('\uFF12'));
157   assertEquals('650 253 2222', f.inputDigit('\uFF12'));
158 }
159
160 function testAYTFUSMobileShortCode() {
161   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
162   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
163   assertEquals('*', f.inputDigit('*'));
164   assertEquals('*1', f.inputDigit('1'));
165   assertEquals('*12', f.inputDigit('2'));
166   assertEquals('*121', f.inputDigit('1'));
167   assertEquals('*121#', f.inputDigit('#'));
168 }
169
170 function testAYTFUSVanityNumber() {
171   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
172   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
173   assertEquals('8', f.inputDigit('8'));
174   assertEquals('80', f.inputDigit('0'));
175   assertEquals('800', f.inputDigit('0'));
176   assertEquals('800 ', f.inputDigit(' '));
177   assertEquals('800 M', f.inputDigit('M'));
178   assertEquals('800 MY', f.inputDigit('Y'));
179   assertEquals('800 MY ', f.inputDigit(' '));
180   assertEquals('800 MY A', f.inputDigit('A'));
181   assertEquals('800 MY AP', f.inputDigit('P'));
182   assertEquals('800 MY APP', f.inputDigit('P'));
183   assertEquals('800 MY APPL', f.inputDigit('L'));
184   assertEquals('800 MY APPLE', f.inputDigit('E'));
185 }
186
187 function testAYTFAndRememberPositionUS() {
188   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
189   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
190   assertEquals('1', f.inputDigitAndRememberPosition('1'));
191   assertEquals(1, f.getRememberedPosition());
192   assertEquals('16', f.inputDigit('6'));
193   assertEquals('1 65', f.inputDigit('5'));
194   assertEquals(1, f.getRememberedPosition());
195   assertEquals('1 650', f.inputDigitAndRememberPosition('0'));
196   assertEquals(5, f.getRememberedPosition());
197   assertEquals('1 650 2', f.inputDigit('2'));
198   assertEquals('1 650 25', f.inputDigit('5'));
199   // Note the remembered position for digit '0' changes from 4 to 5, because a
200   // space is now inserted in the front.
201   assertEquals(5, f.getRememberedPosition());
202   assertEquals('1 650 253', f.inputDigit('3'));
203   assertEquals('1 650 253 2', f.inputDigit('2'));
204   assertEquals('1 650 253 22', f.inputDigit('2'));
205   assertEquals(5, f.getRememberedPosition());
206   assertEquals('1 650 253 222', f.inputDigitAndRememberPosition('2'));
207   assertEquals(13, f.getRememberedPosition());
208   assertEquals('1 650 253 2222', f.inputDigit('2'));
209   assertEquals(13, f.getRememberedPosition());
210   assertEquals('165025322222', f.inputDigit('2'));
211   assertEquals(10, f.getRememberedPosition());
212   assertEquals('1650253222222', f.inputDigit('2'));
213   assertEquals(10, f.getRememberedPosition());
214
215   f.clear();
216   assertEquals('1', f.inputDigit('1'));
217   assertEquals('16', f.inputDigitAndRememberPosition('6'));
218   assertEquals(2, f.getRememberedPosition());
219   assertEquals('1 65', f.inputDigit('5'));
220   assertEquals('1 650', f.inputDigit('0'));
221   assertEquals(3, f.getRememberedPosition());
222   assertEquals('1 650 2', f.inputDigit('2'));
223   assertEquals('1 650 25', f.inputDigit('5'));
224   assertEquals(3, 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(3, f.getRememberedPosition());
229   assertEquals('1 650 253 222', f.inputDigit('2'));
230   assertEquals('1 650 253 2222', f.inputDigit('2'));
231   assertEquals('165025322222', f.inputDigit('2'));
232   assertEquals(2, f.getRememberedPosition());
233   assertEquals('1650253222222', f.inputDigit('2'));
234   assertEquals(2, f.getRememberedPosition());
235
236   f.clear();
237   assertEquals('6', f.inputDigit('6'));
238   assertEquals('65', f.inputDigit('5'));
239   assertEquals('650', f.inputDigit('0'));
240   assertEquals('650 2', f.inputDigit('2'));
241   assertEquals('650 25', f.inputDigit('5'));
242   assertEquals('650 253', f.inputDigit('3'));
243   assertEquals('650 2532', f.inputDigitAndRememberPosition('2'));
244   assertEquals(8, f.getRememberedPosition());
245   assertEquals('650 253 22', f.inputDigit('2'));
246   assertEquals(9, f.getRememberedPosition());
247   assertEquals('650 253 222', f.inputDigit('2'));
248   // No more formatting when semicolon is entered.
249   assertEquals('650253222;', f.inputDigit(';'));
250   assertEquals(7, f.getRememberedPosition());
251   assertEquals('650253222;2', f.inputDigit('2'));
252
253   f.clear();
254   assertEquals('6', f.inputDigit('6'));
255   assertEquals('65', f.inputDigit('5'));
256   assertEquals('650', f.inputDigit('0'));
257   // No more formatting when users choose to do their own formatting.
258   assertEquals('650-', f.inputDigit('-'));
259   assertEquals('650-2', f.inputDigitAndRememberPosition('2'));
260   assertEquals(5, f.getRememberedPosition());
261   assertEquals('650-25', f.inputDigit('5'));
262   assertEquals(5, f.getRememberedPosition());
263   assertEquals('650-253', f.inputDigit('3'));
264   assertEquals(5, f.getRememberedPosition());
265   assertEquals('650-253-', f.inputDigit('-'));
266   assertEquals('650-253-2', f.inputDigit('2'));
267   assertEquals('650-253-22', f.inputDigit('2'));
268   assertEquals('650-253-222', f.inputDigit('2'));
269   assertEquals('650-253-2222', f.inputDigit('2'));
270
271   f.clear();
272   assertEquals('0', f.inputDigit('0'));
273   assertEquals('01', f.inputDigit('1'));
274   assertEquals('011 ', f.inputDigit('1'));
275   assertEquals('011 4', f.inputDigitAndRememberPosition('4'));
276   assertEquals('011 48 ', f.inputDigit('8'));
277   assertEquals(5, f.getRememberedPosition());
278   assertEquals('011 48 8', f.inputDigit('8'));
279   assertEquals(5, f.getRememberedPosition());
280   assertEquals('011 48 88', f.inputDigit('8'));
281   assertEquals('011 48 88 1', f.inputDigit('1'));
282   assertEquals('011 48 88 12', f.inputDigit('2'));
283   assertEquals(5, f.getRememberedPosition());
284   assertEquals('011 48 88 123', f.inputDigit('3'));
285   assertEquals('011 48 88 123 1', f.inputDigit('1'));
286   assertEquals('011 48 88 123 12', f.inputDigit('2'));
287   assertEquals('011 48 88 123 12 1', f.inputDigit('1'));
288   assertEquals('011 48 88 123 12 12', f.inputDigit('2'));
289
290   f.clear();
291   assertEquals('+', f.inputDigit('+'));
292   assertEquals('+1', f.inputDigit('1'));
293   assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
294   assertEquals('+1 65', f.inputDigit('5'));
295   assertEquals('+1 650', f.inputDigit('0'));
296   assertEquals(4, f.getRememberedPosition());
297   assertEquals('+1 650 2', f.inputDigit('2'));
298   assertEquals(4, f.getRememberedPosition());
299   assertEquals('+1 650 25', f.inputDigit('5'));
300   assertEquals('+1 650 253', f.inputDigitAndRememberPosition('3'));
301   assertEquals('+1 650 253 2', f.inputDigit('2'));
302   assertEquals('+1 650 253 22', f.inputDigit('2'));
303   assertEquals('+1 650 253 222', f.inputDigit('2'));
304   assertEquals(10, f.getRememberedPosition());
305
306   f.clear();
307   assertEquals('+', f.inputDigit('+'));
308   assertEquals('+1', f.inputDigit('1'));
309   assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
310   assertEquals('+1 65', f.inputDigit('5'));
311   assertEquals('+1 650', f.inputDigit('0'));
312   assertEquals(4, f.getRememberedPosition());
313   assertEquals('+1 650 2', f.inputDigit('2'));
314   assertEquals(4, f.getRememberedPosition());
315   assertEquals('+1 650 25', f.inputDigit('5'));
316   assertEquals('+1 650 253', f.inputDigit('3'));
317   assertEquals('+1 650 253 2', f.inputDigit('2'));
318   assertEquals('+1 650 253 22', f.inputDigit('2'));
319   assertEquals('+1 650 253 222', f.inputDigit('2'));
320   assertEquals('+1650253222;', f.inputDigit(';'));
321   assertEquals(3, f.getRememberedPosition());
322 }
323
324 function testAYTFGBFixedLine() {
325   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
326   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
327   assertEquals('0', f.inputDigit('0'));
328   assertEquals('02', f.inputDigit('2'));
329   assertEquals('020', f.inputDigit('0'));
330   assertEquals('020 7', f.inputDigitAndRememberPosition('7'));
331   assertEquals(5, f.getRememberedPosition());
332   assertEquals('020 70', f.inputDigit('0'));
333   assertEquals('020 703', f.inputDigit('3'));
334   assertEquals(5, f.getRememberedPosition());
335   assertEquals('020 7031', f.inputDigit('1'));
336   assertEquals('020 7031 3', f.inputDigit('3'));
337   assertEquals('020 7031 30', f.inputDigit('0'));
338   assertEquals('020 7031 300', f.inputDigit('0'));
339   assertEquals('020 7031 3000', f.inputDigit('0'));
340 }
341
342 function testAYTFGBTollFree() {
343   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
344   var f = new i18n.phonenumbers.AsYouTypeFormatter('gb');
345   assertEquals('0', f.inputDigit('0'));
346   assertEquals('08', f.inputDigit('8'));
347   assertEquals('080', f.inputDigit('0'));
348   assertEquals('080 7', f.inputDigit('7'));
349   assertEquals('080 70', f.inputDigit('0'));
350   assertEquals('080 703', f.inputDigit('3'));
351   assertEquals('080 7031', f.inputDigit('1'));
352   assertEquals('080 7031 3', f.inputDigit('3'));
353   assertEquals('080 7031 30', f.inputDigit('0'));
354   assertEquals('080 7031 300', f.inputDigit('0'));
355   assertEquals('080 7031 3000', f.inputDigit('0'));
356 }
357
358 function testAYTFGBPremiumRate() {
359   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
360   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
361   assertEquals('0', f.inputDigit('0'));
362   assertEquals('09', f.inputDigit('9'));
363   assertEquals('090', f.inputDigit('0'));
364   assertEquals('090 7', f.inputDigit('7'));
365   assertEquals('090 70', f.inputDigit('0'));
366   assertEquals('090 703', f.inputDigit('3'));
367   assertEquals('090 7031', f.inputDigit('1'));
368   assertEquals('090 7031 3', f.inputDigit('3'));
369   assertEquals('090 7031 30', f.inputDigit('0'));
370   assertEquals('090 7031 300', f.inputDigit('0'));
371   assertEquals('090 7031 3000', f.inputDigit('0'));
372 }
373
374 function testAYTFNZMobile() {
375   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
376   var f = new i18n.phonenumbers.AsYouTypeFormatter('NZ');
377   assertEquals('0', f.inputDigit('0'));
378   assertEquals('02', f.inputDigit('2'));
379   assertEquals('021', f.inputDigit('1'));
380   assertEquals('02-11', f.inputDigit('1'));
381   assertEquals('02-112', f.inputDigit('2'));
382   // Note the unittest is using fake metadata which might produce non-ideal
383   // results.
384   assertEquals('02-112 3', f.inputDigit('3'));
385   assertEquals('02-112 34', f.inputDigit('4'));
386   assertEquals('02-112 345', f.inputDigit('5'));
387   assertEquals('02-112 3456', f.inputDigit('6'));
388 }
389
390 function testAYTFDE() {
391   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
392   var f = new i18n.phonenumbers.AsYouTypeFormatter('DE');
393   assertEquals('0', f.inputDigit('0'));
394   assertEquals('03', f.inputDigit('3'));
395   assertEquals('030', f.inputDigit('0'));
396   assertEquals('030/1', f.inputDigit('1'));
397   assertEquals('030/12', f.inputDigit('2'));
398   assertEquals('030/123', f.inputDigit('3'));
399   assertEquals('030/1234', f.inputDigit('4'));
400
401   // 04134 1234
402   f.clear();
403   assertEquals('0', f.inputDigit('0'));
404   assertEquals('04', f.inputDigit('4'));
405   assertEquals('041', f.inputDigit('1'));
406   assertEquals('041 3', f.inputDigit('3'));
407   assertEquals('041 34', f.inputDigit('4'));
408   assertEquals('04134 1', f.inputDigit('1'));
409   assertEquals('04134 12', f.inputDigit('2'));
410   assertEquals('04134 123', f.inputDigit('3'));
411   assertEquals('04134 1234', f.inputDigit('4'));
412
413   // 08021 2345
414   f.clear();
415   assertEquals('0', f.inputDigit('0'));
416   assertEquals('08', f.inputDigit('8'));
417   assertEquals('080', f.inputDigit('0'));
418   assertEquals('080 2', f.inputDigit('2'));
419   assertEquals('080 21', f.inputDigit('1'));
420   assertEquals('08021 2', f.inputDigit('2'));
421   assertEquals('08021 23', f.inputDigit('3'));
422   assertEquals('08021 234', f.inputDigit('4'));
423   assertEquals('08021 2345', f.inputDigit('5'));
424
425   // 00 1 650 253 2250
426   f.clear();
427   assertEquals('0', f.inputDigit('0'));
428   assertEquals('00', f.inputDigit('0'));
429   assertEquals('00 1 ', f.inputDigit('1'));
430   assertEquals('00 1 6', f.inputDigit('6'));
431   assertEquals('00 1 65', f.inputDigit('5'));
432   assertEquals('00 1 650', f.inputDigit('0'));
433   assertEquals('00 1 650 2', f.inputDigit('2'));
434   assertEquals('00 1 650 25', f.inputDigit('5'));
435   assertEquals('00 1 650 253', f.inputDigit('3'));
436   assertEquals('00 1 650 253 2', f.inputDigit('2'));
437   assertEquals('00 1 650 253 22', f.inputDigit('2'));
438   assertEquals('00 1 650 253 222', f.inputDigit('2'));
439   assertEquals('00 1 650 253 2222', f.inputDigit('2'));
440 }
441
442 function testAYTFAR() {
443   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
444   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
445   assertEquals('0', f.inputDigit('0'));
446   assertEquals('01', f.inputDigit('1'));
447   assertEquals('011', f.inputDigit('1'));
448   assertEquals('011 7', f.inputDigit('7'));
449   assertEquals('011 70', f.inputDigit('0'));
450   assertEquals('011 703', f.inputDigit('3'));
451   assertEquals('011 7031', f.inputDigit('1'));
452   assertEquals('011 7031-3', f.inputDigit('3'));
453   assertEquals('011 7031-30', f.inputDigit('0'));
454   assertEquals('011 7031-300', f.inputDigit('0'));
455   assertEquals('011 7031-3000', f.inputDigit('0'));
456 }
457
458 function testAYTFARMobile() {
459   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
460   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
461   assertEquals('+', f.inputDigit('+'));
462   assertEquals('+5', f.inputDigit('5'));
463   assertEquals('+54 ', f.inputDigit('4'));
464   assertEquals('+54 9', f.inputDigit('9'));
465   assertEquals('+54 91', f.inputDigit('1'));
466   assertEquals('+54 9 11', f.inputDigit('1'));
467   assertEquals('+54 9 11 2', f.inputDigit('2'));
468   assertEquals('+54 9 11 23', f.inputDigit('3'));
469   assertEquals('+54 9 11 231', f.inputDigit('1'));
470   assertEquals('+54 9 11 2312', f.inputDigit('2'));
471   assertEquals('+54 9 11 2312 1', f.inputDigit('1'));
472   assertEquals('+54 9 11 2312 12', f.inputDigit('2'));
473   assertEquals('+54 9 11 2312 123', f.inputDigit('3'));
474   assertEquals('+54 9 11 2312 1234', f.inputDigit('4'));
475 }
476
477 function testAYTFKR() {
478   // +82 51 234 5678
479   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
480   var f = new i18n.phonenumbers.AsYouTypeFormatter('KR');
481   assertEquals('+', f.inputDigit('+'));
482   assertEquals('+8', f.inputDigit('8'));
483   assertEquals('+82 ', f.inputDigit('2'));
484   assertEquals('+82 5', f.inputDigit('5'));
485   assertEquals('+82 51', f.inputDigit('1'));
486   assertEquals('+82 51-2', f.inputDigit('2'));
487   assertEquals('+82 51-23', f.inputDigit('3'));
488   assertEquals('+82 51-234', f.inputDigit('4'));
489   assertEquals('+82 51-234-5', f.inputDigit('5'));
490   assertEquals('+82 51-234-56', f.inputDigit('6'));
491   assertEquals('+82 51-234-567', f.inputDigit('7'));
492   assertEquals('+82 51-234-5678', f.inputDigit('8'));
493
494   // +82 2 531 5678
495   f.clear();
496   assertEquals('+', f.inputDigit('+'));
497   assertEquals('+8', f.inputDigit('8'));
498   assertEquals('+82 ', f.inputDigit('2'));
499   assertEquals('+82 2', f.inputDigit('2'));
500   assertEquals('+82 25', f.inputDigit('5'));
501   assertEquals('+82 2-53', f.inputDigit('3'));
502   assertEquals('+82 2-531', f.inputDigit('1'));
503   assertEquals('+82 2-531-5', f.inputDigit('5'));
504   assertEquals('+82 2-531-56', f.inputDigit('6'));
505   assertEquals('+82 2-531-567', f.inputDigit('7'));
506   assertEquals('+82 2-531-5678', f.inputDigit('8'));
507
508   // +82 2 3665 5678
509   f.clear();
510   assertEquals('+', f.inputDigit('+'));
511   assertEquals('+8', f.inputDigit('8'));
512   assertEquals('+82 ', f.inputDigit('2'));
513   assertEquals('+82 2', f.inputDigit('2'));
514   assertEquals('+82 23', f.inputDigit('3'));
515   assertEquals('+82 2-36', f.inputDigit('6'));
516   assertEquals('+82 2-366', f.inputDigit('6'));
517   assertEquals('+82 2-3665', f.inputDigit('5'));
518   assertEquals('+82 2-3665-5', f.inputDigit('5'));
519   assertEquals('+82 2-3665-56', f.inputDigit('6'));
520   assertEquals('+82 2-3665-567', f.inputDigit('7'));
521   assertEquals('+82 2-3665-5678', f.inputDigit('8'));
522
523   // 02-114
524   f.clear();
525   assertEquals('0', f.inputDigit('0'));
526   assertEquals('02', f.inputDigit('2'));
527   assertEquals('021', f.inputDigit('1'));
528   assertEquals('02-11', f.inputDigit('1'));
529   assertEquals('02-114', f.inputDigit('4'));
530
531   // 02-1300
532   f.clear();
533   assertEquals('0', f.inputDigit('0'));
534   assertEquals('02', f.inputDigit('2'));
535   assertEquals('021', f.inputDigit('1'));
536   assertEquals('02-13', f.inputDigit('3'));
537   assertEquals('02-130', f.inputDigit('0'));
538   assertEquals('02-1300', f.inputDigit('0'));
539
540   // 011-456-7890
541   f.clear();
542   assertEquals('0', f.inputDigit('0'));
543   assertEquals('01', f.inputDigit('1'));
544   assertEquals('011', f.inputDigit('1'));
545   assertEquals('011-4', f.inputDigit('4'));
546   assertEquals('011-45', f.inputDigit('5'));
547   assertEquals('011-456', f.inputDigit('6'));
548   assertEquals('011-456-7', f.inputDigit('7'));
549   assertEquals('011-456-78', f.inputDigit('8'));
550   assertEquals('011-456-789', f.inputDigit('9'));
551   assertEquals('011-456-7890', f.inputDigit('0'));
552
553   // 011-9876-7890
554   f.clear();
555   assertEquals('0', f.inputDigit('0'));
556   assertEquals('01', f.inputDigit('1'));
557   assertEquals('011', f.inputDigit('1'));
558   assertEquals('011-9', f.inputDigit('9'));
559   assertEquals('011-98', f.inputDigit('8'));
560   assertEquals('011-987', f.inputDigit('7'));
561   assertEquals('011-9876', f.inputDigit('6'));
562   assertEquals('011-9876-7', f.inputDigit('7'));
563   assertEquals('011-9876-78', f.inputDigit('8'));
564   assertEquals('011-9876-789', f.inputDigit('9'));
565   assertEquals('011-9876-7890', f.inputDigit('0'));
566 }
567
568 function testAYTFMultipleLeadingDigitPatterns() {
569   // +81 50 2345 6789
570   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
571   var f = new i18n.phonenumbers.AsYouTypeFormatter('JP');
572   assertEquals('+', f.inputDigit('+'));
573   assertEquals('+8', f.inputDigit('8'));
574   assertEquals('+81 ', f.inputDigit('1'));
575   assertEquals('+81 5', f.inputDigit('5'));
576   assertEquals('+81 50', f.inputDigit('0'));
577   assertEquals('+81 50 2', f.inputDigit('2'));
578   assertEquals('+81 50 23', f.inputDigit('3'));
579   assertEquals('+81 50 234', f.inputDigit('4'));
580   assertEquals('+81 50 2345', f.inputDigit('5'));
581   assertEquals('+81 50 2345 6', f.inputDigit('6'));
582   assertEquals('+81 50 2345 67', f.inputDigit('7'));
583   assertEquals('+81 50 2345 678', f.inputDigit('8'));
584   assertEquals('+81 50 2345 6789', f.inputDigit('9'));
585
586   // +81 222 12 5678
587   f.clear();
588   assertEquals('+', f.inputDigit('+'));
589   assertEquals('+8', f.inputDigit('8'));
590   assertEquals('+81 ', f.inputDigit('1'));
591   assertEquals('+81 2', f.inputDigit('2'));
592   assertEquals('+81 22', f.inputDigit('2'));
593   assertEquals('+81 22 2', f.inputDigit('2'));
594   assertEquals('+81 22 21', f.inputDigit('1'));
595   assertEquals('+81 2221 2', f.inputDigit('2'));
596   assertEquals('+81 222 12 5', f.inputDigit('5'));
597   assertEquals('+81 222 12 56', f.inputDigit('6'));
598   assertEquals('+81 222 12 567', f.inputDigit('7'));
599   assertEquals('+81 222 12 5678', f.inputDigit('8'));
600
601   // +81 3332 2 5678
602   f.clear();
603   assertEquals('+', f.inputDigit('+'));
604   assertEquals('+8', f.inputDigit('8'));
605   assertEquals('+81 ', f.inputDigit('1'));
606   assertEquals('+81 3', f.inputDigit('3'));
607   assertEquals('+81 33', f.inputDigit('3'));
608   assertEquals('+81 33 3', f.inputDigit('3'));
609   assertEquals('+81 3332', f.inputDigit('2'));
610   assertEquals('+81 3332 2', f.inputDigit('2'));
611   assertEquals('+81 3332 2 5', f.inputDigit('5'));
612   assertEquals('+81 3332 2 56', f.inputDigit('6'));
613   assertEquals('+81 3332 2 567', f.inputDigit('7'));
614   assertEquals('+81 3332 2 5678', f.inputDigit('8'));
615 }