3 * Copyright (C) 2010 Google Inc.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @fileoverview Unit tests for the AsYouTypeFormatter.
21 * @author Nikolaos Trogkanis
24 goog.require('goog.testing.jsunit');
25 goog.require('i18n.phonenumbers.AsYouTypeFormatter');
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'));
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'));
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'));
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'));
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'));
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'));
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'));
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'));
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'));
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'));
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('#'));
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'));
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());
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());
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'));
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'));
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'));
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());
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());
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'));
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'));
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'));
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
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'));
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'));
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'));
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'));
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'));
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'));
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'));
500 function testAYTFKR() {
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'));
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'));
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'));
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'));
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'));
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'));
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'));
591 function testAYTF_MX() {
592 /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
593 var f = new i18n.phonenumbers.AsYouTypeFormatter('MX');
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'));
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'));
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'));
642 // +52 1 55 1234 5678
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'));
659 // +52 1 541 234 5678
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'));
677 function testAYTFMultipleLeadingDigitPatterns() {
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'));
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'));
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'));