• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2011 The Libphonenumber Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // Unit tests for asyoutypeformatter.cc, ported from AsYouTypeFormatterTest.java
16 //
17 // Note that these tests use the test metadata, not the normal metadata file,
18 // so should not be used for regression test purposes - these tests are
19 // illustrative only and test functionality.
20 
21 #include "phonenumbers/asyoutypeformatter.h"
22 
23 #include <gtest/gtest.h>
24 
25 #include "phonenumbers/base/logging.h"
26 #include "phonenumbers/base/memory/scoped_ptr.h"
27 #include "phonenumbers/default_logger.h"
28 #include "phonenumbers/phonenumberutil.h"
29 #include "phonenumbers/test_util.h"
30 
31 namespace i18n {
32 namespace phonenumbers {
33 
34 class PhoneMetadata;
35 
36 class AsYouTypeFormatterTest : public testing::Test {
37  public:
38   // This type is neither copyable nor movable.
39   AsYouTypeFormatterTest(const AsYouTypeFormatterTest&) = delete;
40   AsYouTypeFormatterTest& operator=(const AsYouTypeFormatterTest&) = delete;
41 
42  protected:
AsYouTypeFormatterTest()43   AsYouTypeFormatterTest() : phone_util_(*PhoneNumberUtil::GetInstance()) {
44     PhoneNumberUtil::GetInstance()->SetLogger(new StdoutLogger());
45   }
46 
GetCurrentMetadata() const47   const PhoneMetadata* GetCurrentMetadata() const {
48     return formatter_->current_metadata_;
49   }
50 
GetExtractedNationalPrefix() const51   const string& GetExtractedNationalPrefix() const {
52     return formatter_->GetExtractedNationalPrefix();
53   }
54 
ConvertUnicodeStringPosition(const UnicodeString & s,int pos) const55   int ConvertUnicodeStringPosition(const UnicodeString& s, int pos) const {
56     return AsYouTypeFormatter::ConvertUnicodeStringPosition(s, pos);
57   }
58 
59   const PhoneNumberUtil& phone_util_;
60   scoped_ptr<AsYouTypeFormatter> formatter_;
61   string result_;
62 
63 };
64 
TEST_F(AsYouTypeFormatterTest,ConvertUnicodeStringPosition)65 TEST_F(AsYouTypeFormatterTest, ConvertUnicodeStringPosition) {
66   EXPECT_EQ(-1, ConvertUnicodeStringPosition(UnicodeString("12345"), 10));
67   EXPECT_EQ(3, ConvertUnicodeStringPosition(UnicodeString("12345"), 3));
68   EXPECT_EQ(0, ConvertUnicodeStringPosition(
69       UnicodeString("\xEF\xBC\x95" /* "5" */), 0));
70   EXPECT_EQ(4, ConvertUnicodeStringPosition(
71       UnicodeString("0\xEF\xBC\x95""3" /* "053" */), 2));
72   EXPECT_EQ(5, ConvertUnicodeStringPosition(
73       UnicodeString("0\xEF\xBC\x95""3" /* "053" */), 3));
74 }
75 
TEST_F(AsYouTypeFormatterTest,Constructor)76 TEST_F(AsYouTypeFormatterTest, Constructor) {
77   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
78 
79   EXPECT_TRUE(GetCurrentMetadata() != NULL);
80 }
81 
TEST_F(AsYouTypeFormatterTest,InvalidPlusSign)82 TEST_F(AsYouTypeFormatterTest, InvalidPlusSign) {
83   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::GetUnknown()));
84   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
85   EXPECT_EQ("+4", formatter_->InputDigit('4', &result_));
86   EXPECT_EQ("+48 ", formatter_->InputDigit('8', &result_));
87   EXPECT_EQ("+48 8", formatter_->InputDigit('8', &result_));
88   EXPECT_EQ("+48 88", formatter_->InputDigit('8', &result_));
89   EXPECT_EQ("+48 88 1", formatter_->InputDigit('1', &result_));
90   EXPECT_EQ("+48 88 12", formatter_->InputDigit('2', &result_));
91   EXPECT_EQ("+48 88 123", formatter_->InputDigit('3', &result_));
92   EXPECT_EQ("+48 88 123 1", formatter_->InputDigit('1', &result_));
93   // A plus sign can only appear at the beginning of the number; otherwise, no
94   // formatting is applied.
95   EXPECT_EQ("+48881231+", formatter_->InputDigit('+', &result_));
96   EXPECT_EQ("+48881231+2", formatter_->InputDigit('2', &result_));
97 }
98 
TEST_F(AsYouTypeFormatterTest,TooLongNumberMatchingMultipleLeadingDigits)99 TEST_F(AsYouTypeFormatterTest, TooLongNumberMatchingMultipleLeadingDigits) {
100   // See https://github.com/google/libphonenumber/issues/36
101   // The bug occurred last time for countries which have two formatting rules
102   // with exactly the same leading digits pattern but differ in length.
103   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::GetUnknown()));
104 
105   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
106   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
107   EXPECT_EQ("+81 ", formatter_->InputDigit('1', &result_));
108   EXPECT_EQ("+81 9", formatter_->InputDigit('9', &result_));
109   EXPECT_EQ("+81 90", formatter_->InputDigit('0', &result_));
110   EXPECT_EQ("+81 90 1", formatter_->InputDigit('1', &result_));
111   EXPECT_EQ("+81 90 12", formatter_->InputDigit('2', &result_));
112   EXPECT_EQ("+81 90 123", formatter_->InputDigit('3', &result_));
113   EXPECT_EQ("+81 90 1234", formatter_->InputDigit('4', &result_));
114   EXPECT_EQ("+81 90 1234 5", formatter_->InputDigit('5', &result_));
115   EXPECT_EQ("+81 90 1234 56", formatter_->InputDigit('6', &result_));
116   EXPECT_EQ("+81 90 1234 567", formatter_->InputDigit('7', &result_));
117   EXPECT_EQ("+81 90 1234 5678", formatter_->InputDigit('8', &result_));
118   EXPECT_EQ("+81 90 12 345 6789", formatter_->InputDigit('9', &result_));
119   EXPECT_EQ("+81901234567890", formatter_->InputDigit('0', &result_));
120   EXPECT_EQ("+819012345678901", formatter_->InputDigit('1', &result_));
121 }
122 
TEST_F(AsYouTypeFormatterTest,CountryWithSpaceInNationalPrefixFormattingRule)123 TEST_F(AsYouTypeFormatterTest, CountryWithSpaceInNationalPrefixFormattingRule) {
124   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::BY()));
125 
126   EXPECT_EQ("8", formatter_->InputDigit('8', &result_));
127   EXPECT_EQ("88", formatter_->InputDigit('8', &result_));
128   EXPECT_EQ("881", formatter_->InputDigit('1', &result_));
129   EXPECT_EQ("8 819", formatter_->InputDigit('9', &result_));
130   EXPECT_EQ("8 8190", formatter_->InputDigit('0', &result_));
131   // The formatting rule for 5 digit numbers states that no space should be
132   // present after the national prefix.
133   EXPECT_EQ("881 901", formatter_->InputDigit('1', &result_));
134   EXPECT_EQ("8 819 012", formatter_->InputDigit('2', &result_));
135   // Too long, no formatting rule applies.
136   EXPECT_EQ("88190123", formatter_->InputDigit('3', &result_));
137 }
138 
TEST_F(AsYouTypeFormatterTest,CountryWithSpaceInNationalPrefixFormattingRuleAndLongNdd)139 TEST_F(AsYouTypeFormatterTest,
140        CountryWithSpaceInNationalPrefixFormattingRuleAndLongNdd) {
141   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::BY()));
142 
143   EXPECT_EQ("9", formatter_->InputDigit('9', &result_));
144   EXPECT_EQ("99", formatter_->InputDigit('9', &result_));
145   EXPECT_EQ("999", formatter_->InputDigit('9', &result_));
146   EXPECT_EQ("9999", formatter_->InputDigit('9', &result_));
147   EXPECT_EQ("99999 ", formatter_->InputDigit('9', &result_));
148   EXPECT_EQ("99999 1", formatter_->InputDigit('1', &result_));
149   EXPECT_EQ("99999 12", formatter_->InputDigit('2', &result_));
150   EXPECT_EQ("99999 123", formatter_->InputDigit('3', &result_));
151   EXPECT_EQ("99999 1234", formatter_->InputDigit('4', &result_));
152   EXPECT_EQ("99999 12 345", formatter_->InputDigit('5', &result_));
153 }
154 
TEST_F(AsYouTypeFormatterTest,AYTF_US)155 TEST_F(AsYouTypeFormatterTest, AYTF_US) {
156   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
157 
158   EXPECT_EQ("6", formatter_->InputDigit('6', &result_));
159   EXPECT_EQ("65", formatter_->InputDigit('5', &result_));
160   EXPECT_EQ("650", formatter_->InputDigit('0', &result_));
161   EXPECT_EQ("650 2", formatter_->InputDigit('2', &result_));
162   EXPECT_EQ("650 25", formatter_->InputDigit('5', &result_));
163   EXPECT_EQ("650 253", formatter_->InputDigit('3', &result_));
164 
165   // Note this is how a US local number (without area code) should be formatted.
166   EXPECT_EQ("650 2532", formatter_->InputDigit('2', &result_));
167   EXPECT_EQ("650 253 22", formatter_->InputDigit('2', &result_));
168   EXPECT_EQ("650 253 222", formatter_->InputDigit('2', &result_));
169   EXPECT_EQ("650 253 2222", formatter_->InputDigit('2', &result_));
170 
171   formatter_->Clear();
172   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
173   EXPECT_EQ("16", formatter_->InputDigit('6', &result_));
174   EXPECT_EQ("1 65", formatter_->InputDigit('5', &result_));
175   EXPECT_EQ("1 650", formatter_->InputDigit('0', &result_));
176   EXPECT_EQ("1 650 2", formatter_->InputDigit('2', &result_));
177   EXPECT_EQ("1 650 25", formatter_->InputDigit('5', &result_));
178   EXPECT_EQ("1 650 253", formatter_->InputDigit('3', &result_));
179   EXPECT_EQ("1 650 253 2", formatter_->InputDigit('2', &result_));
180   EXPECT_EQ("1 650 253 22", formatter_->InputDigit('2', &result_));
181   EXPECT_EQ("1 650 253 222", formatter_->InputDigit('2', &result_));
182   EXPECT_EQ("1 650 253 2222", formatter_->InputDigit('2', &result_));
183 
184   formatter_->Clear();
185   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
186   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
187   EXPECT_EQ("011 ", formatter_->InputDigit('1', &result_));
188   EXPECT_EQ("011 4", formatter_->InputDigit('4', &result_));
189   EXPECT_EQ("011 44 ", formatter_->InputDigit('4', &result_));
190   EXPECT_EQ("011 44 6", formatter_->InputDigit('6', &result_));
191   EXPECT_EQ("011 44 61", formatter_->InputDigit('1', &result_));
192   EXPECT_EQ("011 44 6 12", formatter_->InputDigit('2', &result_));
193   EXPECT_EQ("011 44 6 123", formatter_->InputDigit('3', &result_));
194   EXPECT_EQ("011 44 6 123 1", formatter_->InputDigit('1', &result_));
195   EXPECT_EQ("011 44 6 123 12", formatter_->InputDigit('2', &result_));
196   EXPECT_EQ("011 44 6 123 123", formatter_->InputDigit('3', &result_));
197   EXPECT_EQ("011 44 6 123 123 1", formatter_->InputDigit('1', &result_));
198   EXPECT_EQ("011 44 6 123 123 12", formatter_->InputDigit('2', &result_));
199   EXPECT_EQ("011 44 6 123 123 123", formatter_->InputDigit('3', &result_));
200 
201   formatter_->Clear();
202   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
203   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
204   EXPECT_EQ("011 ", formatter_->InputDigit('1', &result_));
205   EXPECT_EQ("011 5", formatter_->InputDigit('5', &result_));
206   EXPECT_EQ("011 54 ", formatter_->InputDigit('4', &result_));
207   EXPECT_EQ("011 54 9", formatter_->InputDigit('9', &result_));
208   EXPECT_EQ("011 54 91", formatter_->InputDigit('1', &result_));
209   EXPECT_EQ("011 54 9 11", formatter_->InputDigit('1', &result_));
210   EXPECT_EQ("011 54 9 11 2", formatter_->InputDigit('2', &result_));
211   EXPECT_EQ("011 54 9 11 23", formatter_->InputDigit('3', &result_));
212   EXPECT_EQ("011 54 9 11 231", formatter_->InputDigit('1', &result_));
213   EXPECT_EQ("011 54 9 11 2312", formatter_->InputDigit('2', &result_));
214   EXPECT_EQ("011 54 9 11 2312 1", formatter_->InputDigit('1', &result_));
215   EXPECT_EQ("011 54 9 11 2312 12", formatter_->InputDigit('2', &result_));
216   EXPECT_EQ("011 54 9 11 2312 123", formatter_->InputDigit('3', &result_));
217   EXPECT_EQ("011 54 9 11 2312 1234", formatter_->InputDigit('4', &result_));
218 
219   formatter_->Clear();
220   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
221   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
222   EXPECT_EQ("011 ", formatter_->InputDigit('1', &result_));
223   EXPECT_EQ("011 2", formatter_->InputDigit('2', &result_));
224   EXPECT_EQ("011 24", formatter_->InputDigit('4', &result_));
225   EXPECT_EQ("011 244 ", formatter_->InputDigit('4', &result_));
226   EXPECT_EQ("011 244 2", formatter_->InputDigit('2', &result_));
227   EXPECT_EQ("011 244 28", formatter_->InputDigit('8', &result_));
228   EXPECT_EQ("011 244 280", formatter_->InputDigit('0', &result_));
229   EXPECT_EQ("011 244 280 0", formatter_->InputDigit('0', &result_));
230   EXPECT_EQ("011 244 280 00", formatter_->InputDigit('0', &result_));
231   EXPECT_EQ("011 244 280 000", formatter_->InputDigit('0', &result_));
232   EXPECT_EQ("011 244 280 000 0", formatter_->InputDigit('0', &result_));
233   EXPECT_EQ("011 244 280 000 00", formatter_->InputDigit('0', &result_));
234   EXPECT_EQ("011 244 280 000 000", formatter_->InputDigit('0', &result_));
235 
236   formatter_->Clear();
237   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
238   EXPECT_EQ("+4", formatter_->InputDigit('4', &result_));
239   EXPECT_EQ("+48 ", formatter_->InputDigit('8', &result_));
240   EXPECT_EQ("+48 8", formatter_->InputDigit('8', &result_));
241   EXPECT_EQ("+48 88", formatter_->InputDigit('8', &result_));
242   EXPECT_EQ("+48 88 1", formatter_->InputDigit('1', &result_));
243   EXPECT_EQ("+48 88 12", formatter_->InputDigit('2', &result_));
244   EXPECT_EQ("+48 88 123", formatter_->InputDigit('3', &result_));
245   EXPECT_EQ("+48 88 123 1", formatter_->InputDigit('1', &result_));
246   EXPECT_EQ("+48 88 123 12", formatter_->InputDigit('2', &result_));
247   EXPECT_EQ("+48 88 123 12 1", formatter_->InputDigit('1', &result_));
248   EXPECT_EQ("+48 88 123 12 12", formatter_->InputDigit('2', &result_));
249 }
250 
TEST_F(AsYouTypeFormatterTest,AYTF_USFullWidthCharacters)251 TEST_F(AsYouTypeFormatterTest, AYTF_USFullWidthCharacters) {
252   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
253 
254   EXPECT_EQ("\xEF\xBC\x96" /* "6" */,
255             formatter_->InputDigit(UnicodeString("\xEF\xBC\x96" /* "6" */)[0],
256                                    &result_));
257   EXPECT_EQ("\xEF\xBC\x96\xEF\xBC\x95" /* "65" */,
258             formatter_->InputDigit(UnicodeString("\xEF\xBC\x95" /* "5" */)[0],
259                                    &result_));
260   EXPECT_EQ("650",
261             formatter_->InputDigit(UnicodeString("\xEF\xBC\x90" /* "0" */)[0],
262                                    &result_));
263   EXPECT_EQ("650 2",
264             formatter_->InputDigit(UnicodeString("\xEF\xBC\x92" /* "2" */)[0],
265                                    &result_));
266   EXPECT_EQ("650 25",
267             formatter_->InputDigit(UnicodeString("\xEF\xBC\x95" /* "5" */)[0],
268                                    &result_));
269   EXPECT_EQ("650 253",
270             formatter_->InputDigit(UnicodeString("\xEF\xBC\x93" /* "3" */)[0],
271                                    &result_));
272   EXPECT_EQ("650 2532",
273             formatter_->InputDigit(UnicodeString("\xEF\xBC\x92" /* "2" */)[0],
274                                    &result_));
275   EXPECT_EQ("650 253 22",
276             formatter_->InputDigit(UnicodeString("\xEF\xBC\x92" /* "2" */)[0],
277                                    &result_));
278   EXPECT_EQ("650 253 222",
279             formatter_->InputDigit(UnicodeString("\xEF\xBC\x92" /* "2" */)[0],
280                                    &result_));
281   EXPECT_EQ("650 253 2222",
282             formatter_->InputDigit(UnicodeString("\xEF\xBC\x92" /* "2" */)[0],
283                                    &result_));
284 }
285 
TEST_F(AsYouTypeFormatterTest,AYTF_USMobileShortCode)286 TEST_F(AsYouTypeFormatterTest, AYTF_USMobileShortCode) {
287   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
288 
289   EXPECT_EQ("*", formatter_->InputDigit('*', &result_));
290   EXPECT_EQ("*1", formatter_->InputDigit('1', &result_));
291   EXPECT_EQ("*12", formatter_->InputDigit('2', &result_));
292   EXPECT_EQ("*121", formatter_->InputDigit('1', &result_));
293   EXPECT_EQ("*121#", formatter_->InputDigit('#', &result_));
294 }
295 
TEST_F(AsYouTypeFormatterTest,AYTF_USVanityNumber)296 TEST_F(AsYouTypeFormatterTest, AYTF_USVanityNumber) {
297   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
298 
299   EXPECT_EQ("8", formatter_->InputDigit('8', &result_));
300   EXPECT_EQ("80", formatter_->InputDigit('0', &result_));
301   EXPECT_EQ("800", formatter_->InputDigit('0', &result_));
302   EXPECT_EQ("800 ", formatter_->InputDigit(' ', &result_));
303   EXPECT_EQ("800 M", formatter_->InputDigit('M', &result_));
304   EXPECT_EQ("800 MY", formatter_->InputDigit('Y', &result_));
305   EXPECT_EQ("800 MY ", formatter_->InputDigit(' ', &result_));
306   EXPECT_EQ("800 MY A", formatter_->InputDigit('A', &result_));
307   EXPECT_EQ("800 MY AP", formatter_->InputDigit('P', &result_));
308   EXPECT_EQ("800 MY APP", formatter_->InputDigit('P', &result_));
309   EXPECT_EQ("800 MY APPL", formatter_->InputDigit('L', &result_));
310   EXPECT_EQ("800 MY APPLE", formatter_->InputDigit('E', &result_));
311 }
312 
TEST_F(AsYouTypeFormatterTest,AYTFAndRememberPositionUS)313 TEST_F(AsYouTypeFormatterTest, AYTFAndRememberPositionUS) {
314   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
315 
316   EXPECT_EQ("1", formatter_->InputDigitAndRememberPosition('1', &result_));
317   EXPECT_EQ(1, formatter_->GetRememberedPosition());
318 
319   EXPECT_EQ("16", formatter_->InputDigit('6', &result_));
320   EXPECT_EQ("1 65", formatter_->InputDigit('5', &result_));
321   EXPECT_EQ(1, formatter_->GetRememberedPosition());
322   EXPECT_EQ("1 650", formatter_->InputDigitAndRememberPosition('0', &result_));
323   EXPECT_EQ(5, formatter_->GetRememberedPosition());
324   EXPECT_EQ("1 650 2", formatter_->InputDigit('2', &result_));
325   EXPECT_EQ("1 650 25", formatter_->InputDigit('5', &result_));
326 
327   // Note the remembered position for digit "0" changes from 4 to 5, because a
328   // space is now inserted in the front.
329   EXPECT_EQ(5, formatter_->GetRememberedPosition());
330   EXPECT_EQ("1 650 253", formatter_->InputDigit('3', &result_));
331   EXPECT_EQ("1 650 253 2", formatter_->InputDigit('2', &result_));
332   EXPECT_EQ("1 650 253 22", formatter_->InputDigit('2', &result_));
333   EXPECT_EQ(5, formatter_->GetRememberedPosition());
334   EXPECT_EQ("1 650 253 222", formatter_->InputDigitAndRememberPosition('2',
335         &result_));
336   EXPECT_EQ(13, formatter_->GetRememberedPosition());
337   EXPECT_EQ("1 650 253 2222", formatter_->InputDigit('2', &result_));
338   EXPECT_EQ(13, formatter_->GetRememberedPosition());
339   EXPECT_EQ("165025322222", formatter_->InputDigit('2', &result_));
340   EXPECT_EQ(10, formatter_->GetRememberedPosition());
341   EXPECT_EQ("1650253222222", formatter_->InputDigit('2', &result_));
342   EXPECT_EQ(10, formatter_->GetRememberedPosition());
343 
344   formatter_->Clear();
345   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
346   EXPECT_EQ("16", formatter_->InputDigitAndRememberPosition('6', &result_));
347   EXPECT_EQ(2, formatter_->GetRememberedPosition());
348   EXPECT_EQ("1 65", formatter_->InputDigit('5', &result_));
349   EXPECT_EQ("1 650", formatter_->InputDigit('0', &result_));
350   EXPECT_EQ(3, formatter_->GetRememberedPosition());
351   EXPECT_EQ("1 650 2", formatter_->InputDigit('2', &result_));
352   EXPECT_EQ("1 650 25", formatter_->InputDigit('5', &result_));
353   EXPECT_EQ(3, formatter_->GetRememberedPosition());
354   EXPECT_EQ("1 650 253", formatter_->InputDigit('3', &result_));
355   EXPECT_EQ("1 650 253 2", formatter_->InputDigit('2', &result_));
356   EXPECT_EQ("1 650 253 22", formatter_->InputDigit('2', &result_));
357   EXPECT_EQ(3, formatter_->GetRememberedPosition());
358   EXPECT_EQ("1 650 253 222", formatter_->InputDigit('2', &result_));
359   EXPECT_EQ("1 650 253 2222", formatter_->InputDigit('2', &result_));
360   EXPECT_EQ("165025322222", formatter_->InputDigit('2', &result_));
361   EXPECT_EQ(2, formatter_->GetRememberedPosition());
362   EXPECT_EQ("1650253222222", formatter_->InputDigit('2', &result_));
363   EXPECT_EQ(2, formatter_->GetRememberedPosition());
364 
365   formatter_->Clear();
366   EXPECT_EQ("6", formatter_->InputDigit('6', &result_));
367   EXPECT_EQ("65", formatter_->InputDigit('5', &result_));
368   EXPECT_EQ("650", formatter_->InputDigit('0', &result_));
369   EXPECT_EQ("650 2", formatter_->InputDigit('2', &result_));
370   EXPECT_EQ("650 25", formatter_->InputDigit('5', &result_));
371   EXPECT_EQ("650 253", formatter_->InputDigit('3', &result_));
372   EXPECT_EQ("650 2532",
373             formatter_->InputDigitAndRememberPosition('2', &result_));
374   EXPECT_EQ(8, formatter_->GetRememberedPosition());
375   EXPECT_EQ("650 253 22", formatter_->InputDigit('2', &result_));
376   EXPECT_EQ(9, formatter_->GetRememberedPosition());
377   EXPECT_EQ("650 253 222", formatter_->InputDigit('2', &result_));
378   // No more formatting when semicolon is entered.
379   EXPECT_EQ("650253222;", formatter_->InputDigit(';', &result_));
380   EXPECT_EQ(7, formatter_->GetRememberedPosition());
381   EXPECT_EQ("650253222;2", formatter_->InputDigit('2', &result_));
382 
383   formatter_->Clear();
384   EXPECT_EQ("6", formatter_->InputDigit('6', &result_));
385   EXPECT_EQ("65", formatter_->InputDigit('5', &result_));
386   EXPECT_EQ("650", formatter_->InputDigit('0', &result_));
387   // No more formatting when users choose to do their own formatting.
388   EXPECT_EQ("650-", formatter_->InputDigit('-', &result_));
389   EXPECT_EQ("650-2", formatter_->InputDigitAndRememberPosition('2', &result_));
390   EXPECT_EQ(5, formatter_->GetRememberedPosition());
391   EXPECT_EQ("650-25", formatter_->InputDigit('5', &result_));
392   EXPECT_EQ(5, formatter_->GetRememberedPosition());
393   EXPECT_EQ("650-253", formatter_->InputDigit('3', &result_));
394   EXPECT_EQ(5, formatter_->GetRememberedPosition());
395   EXPECT_EQ("650-253-", formatter_->InputDigit('-', &result_));
396   EXPECT_EQ("650-253-2", formatter_->InputDigit('2', &result_));
397   EXPECT_EQ("650-253-22", formatter_->InputDigit('2', &result_));
398   EXPECT_EQ("650-253-222", formatter_->InputDigit('2', &result_));
399   EXPECT_EQ("650-253-2222", formatter_->InputDigit('2', &result_));
400 
401   formatter_->Clear();
402   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
403   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
404   EXPECT_EQ("011 ", formatter_->InputDigit('1', &result_));
405   EXPECT_EQ("011 4", formatter_->InputDigitAndRememberPosition('4', &result_));
406   EXPECT_EQ("011 48 ", formatter_->InputDigit('8', &result_));
407   EXPECT_EQ(5, formatter_->GetRememberedPosition());
408   EXPECT_EQ("011 48 8", formatter_->InputDigit('8', &result_));
409   EXPECT_EQ(5, formatter_->GetRememberedPosition());
410   EXPECT_EQ("011 48 88", formatter_->InputDigit('8', &result_));
411   EXPECT_EQ("011 48 88 1", formatter_->InputDigit('1', &result_));
412   EXPECT_EQ("011 48 88 12", formatter_->InputDigit('2', &result_));
413   EXPECT_EQ(5, formatter_->GetRememberedPosition());
414   EXPECT_EQ("011 48 88 123", formatter_->InputDigit('3', &result_));
415   EXPECT_EQ("011 48 88 123 1", formatter_->InputDigit('1', &result_));
416   EXPECT_EQ("011 48 88 123 12", formatter_->InputDigit('2', &result_));
417   EXPECT_EQ("011 48 88 123 12 1", formatter_->InputDigit('1', &result_));
418   EXPECT_EQ("011 48 88 123 12 12", formatter_->InputDigit('2', &result_));
419 
420   formatter_->Clear();
421   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
422   EXPECT_EQ("+1", formatter_->InputDigit('1', &result_));
423   EXPECT_EQ("+1 6", formatter_->InputDigitAndRememberPosition('6', &result_));
424   EXPECT_EQ("+1 65", formatter_->InputDigit('5', &result_));
425   EXPECT_EQ("+1 650", formatter_->InputDigit('0', &result_));
426   EXPECT_EQ(4, formatter_->GetRememberedPosition());
427   EXPECT_EQ("+1 650 2", formatter_->InputDigit('2', &result_));
428   EXPECT_EQ(4, formatter_->GetRememberedPosition());
429   EXPECT_EQ("+1 650 25", formatter_->InputDigit('5', &result_));
430   EXPECT_EQ("+1 650 253",
431             formatter_->InputDigitAndRememberPosition('3', &result_));
432   EXPECT_EQ("+1 650 253 2", formatter_->InputDigit('2', &result_));
433   EXPECT_EQ("+1 650 253 22", formatter_->InputDigit('2', &result_));
434   EXPECT_EQ("+1 650 253 222", formatter_->InputDigit('2', &result_));
435   EXPECT_EQ(10, formatter_->GetRememberedPosition());
436 
437   formatter_->Clear();
438   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
439   EXPECT_EQ("+1", formatter_->InputDigit('1', &result_));
440   EXPECT_EQ("+1 6", formatter_->InputDigitAndRememberPosition('6', &result_));
441   EXPECT_EQ("+1 65", formatter_->InputDigit('5', &result_));
442   EXPECT_EQ("+1 650", formatter_->InputDigit('0', &result_));
443   EXPECT_EQ(4, formatter_->GetRememberedPosition());
444   EXPECT_EQ("+1 650 2", formatter_->InputDigit('2', &result_));
445   EXPECT_EQ(4, formatter_->GetRememberedPosition());
446   EXPECT_EQ("+1 650 25", formatter_->InputDigit('5', &result_));
447   EXPECT_EQ("+1 650 253", formatter_->InputDigit('3', &result_));
448   EXPECT_EQ("+1 650 253 2", formatter_->InputDigit('2', &result_));
449   EXPECT_EQ("+1 650 253 22", formatter_->InputDigit('2', &result_));
450   EXPECT_EQ("+1 650 253 222", formatter_->InputDigit('2', &result_));
451   EXPECT_EQ("+1650253222;", formatter_->InputDigit(';', &result_));
452   EXPECT_EQ(3, formatter_->GetRememberedPosition());
453 }
454 
TEST_F(AsYouTypeFormatterTest,AYTF_GBFixedLine)455 TEST_F(AsYouTypeFormatterTest, AYTF_GBFixedLine) {
456   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::GB()));
457 
458   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
459   EXPECT_EQ("02", formatter_->InputDigit('2', &result_));
460   EXPECT_EQ("020", formatter_->InputDigit('0', &result_));
461   EXPECT_EQ("020 7", formatter_->InputDigitAndRememberPosition('7', &result_));
462   EXPECT_EQ(5, formatter_->GetRememberedPosition());
463   EXPECT_EQ("020 70", formatter_->InputDigit('0', &result_));
464   EXPECT_EQ("020 703", formatter_->InputDigit('3', &result_));
465   EXPECT_EQ(5, formatter_->GetRememberedPosition());
466   EXPECT_EQ("020 7031", formatter_->InputDigit('1', &result_));
467   EXPECT_EQ("020 7031 3", formatter_->InputDigit('3', &result_));
468   EXPECT_EQ("020 7031 30", formatter_->InputDigit('0', &result_));
469   EXPECT_EQ("020 7031 300", formatter_->InputDigit('0', &result_));
470   EXPECT_EQ("020 7031 3000", formatter_->InputDigit('0', &result_));
471 }
472 
TEST_F(AsYouTypeFormatterTest,AYTF_GBTollFree)473 TEST_F(AsYouTypeFormatterTest, AYTF_GBTollFree) {
474   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::GB()));
475 
476   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
477   EXPECT_EQ("08", formatter_->InputDigit('8', &result_));
478   EXPECT_EQ("080", formatter_->InputDigit('0', &result_));
479   EXPECT_EQ("080 7", formatter_->InputDigit('7', &result_));
480   EXPECT_EQ("080 70", formatter_->InputDigit('0', &result_));
481   EXPECT_EQ("080 703", formatter_->InputDigit('3', &result_));
482   EXPECT_EQ("080 7031", formatter_->InputDigit('1', &result_));
483   EXPECT_EQ("080 7031 3", formatter_->InputDigit('3', &result_));
484   EXPECT_EQ("080 7031 30", formatter_->InputDigit('0', &result_));
485   EXPECT_EQ("080 7031 300", formatter_->InputDigit('0', &result_));
486   EXPECT_EQ("080 7031 3000", formatter_->InputDigit('0', &result_));
487 }
488 
TEST_F(AsYouTypeFormatterTest,AYTF_GBPremiumRate)489 TEST_F(AsYouTypeFormatterTest, AYTF_GBPremiumRate) {
490   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::GB()));
491 
492   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
493   EXPECT_EQ("09", formatter_->InputDigit('9', &result_));
494   EXPECT_EQ("090", formatter_->InputDigit('0', &result_));
495   EXPECT_EQ("090 7", formatter_->InputDigit('7', &result_));
496   EXPECT_EQ("090 70", formatter_->InputDigit('0', &result_));
497   EXPECT_EQ("090 703", formatter_->InputDigit('3', &result_));
498   EXPECT_EQ("090 7031", formatter_->InputDigit('1', &result_));
499   EXPECT_EQ("090 7031 3", formatter_->InputDigit('3', &result_));
500   EXPECT_EQ("090 7031 30", formatter_->InputDigit('0', &result_));
501   EXPECT_EQ("090 7031 300", formatter_->InputDigit('0', &result_));
502   EXPECT_EQ("090 7031 3000", formatter_->InputDigit('0', &result_));
503 }
504 
TEST_F(AsYouTypeFormatterTest,AYTF_NZMobile)505 TEST_F(AsYouTypeFormatterTest, AYTF_NZMobile) {
506   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::NZ()));
507 
508   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
509   EXPECT_EQ("02", formatter_->InputDigit('2', &result_));
510   EXPECT_EQ("021", formatter_->InputDigit('1', &result_));
511   EXPECT_EQ("02-11", formatter_->InputDigit('1', &result_));
512   EXPECT_EQ("02-112", formatter_->InputDigit('2', &result_));
513   // Note the unittest is using fake metadata which might produce non-ideal
514   // results.
515   EXPECT_EQ("02-112 3", formatter_->InputDigit('3', &result_));
516   EXPECT_EQ("02-112 34", formatter_->InputDigit('4', &result_));
517   EXPECT_EQ("02-112 345", formatter_->InputDigit('5', &result_));
518   EXPECT_EQ("02-112 3456", formatter_->InputDigit('6', &result_));
519 }
520 
TEST_F(AsYouTypeFormatterTest,AYTF_DE)521 TEST_F(AsYouTypeFormatterTest, AYTF_DE) {
522   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::DE()));
523 
524   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
525   EXPECT_EQ("03", formatter_->InputDigit('3', &result_));
526   EXPECT_EQ("030", formatter_->InputDigit('0', &result_));
527   EXPECT_EQ("030/1", formatter_->InputDigit('1', &result_));
528   EXPECT_EQ("030/12", formatter_->InputDigit('2', &result_));
529   EXPECT_EQ("030/123", formatter_->InputDigit('3', &result_));
530   EXPECT_EQ("030/1234", formatter_->InputDigit('4', &result_));
531 
532   // 08021 2345
533   formatter_->Clear();
534   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
535   EXPECT_EQ("08", formatter_->InputDigit('8', &result_));
536   EXPECT_EQ("080", formatter_->InputDigit('0', &result_));
537   EXPECT_EQ("080 2", formatter_->InputDigit('2', &result_));
538   EXPECT_EQ("080 21", formatter_->InputDigit('1', &result_));
539   EXPECT_EQ("08021 2", formatter_->InputDigit('2', &result_));
540   EXPECT_EQ("08021 23", formatter_->InputDigit('3', &result_));
541   EXPECT_EQ("08021 234", formatter_->InputDigit('4', &result_));
542   EXPECT_EQ("08021 2345", formatter_->InputDigit('5', &result_));
543 
544   // 00 1 650 253 2250
545   formatter_->Clear();
546   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
547   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
548   EXPECT_EQ("00 1 ", formatter_->InputDigit('1', &result_));
549   EXPECT_EQ("00 1 6", formatter_->InputDigit('6', &result_));
550   EXPECT_EQ("00 1 65", formatter_->InputDigit('5', &result_));
551   EXPECT_EQ("00 1 650", formatter_->InputDigit('0', &result_));
552   EXPECT_EQ("00 1 650 2", formatter_->InputDigit('2', &result_));
553   EXPECT_EQ("00 1 650 25", formatter_->InputDigit('5', &result_));
554   EXPECT_EQ("00 1 650 253", formatter_->InputDigit('3', &result_));
555   EXPECT_EQ("00 1 650 253 2", formatter_->InputDigit('2', &result_));
556   EXPECT_EQ("00 1 650 253 22", formatter_->InputDigit('2', &result_));
557   EXPECT_EQ("00 1 650 253 222", formatter_->InputDigit('2', &result_));
558   EXPECT_EQ("00 1 650 253 2222", formatter_->InputDigit('2', &result_));
559 }
560 
TEST_F(AsYouTypeFormatterTest,AYTF_AR)561 TEST_F(AsYouTypeFormatterTest, AYTF_AR) {
562   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::AR()));
563 
564   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
565   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
566   EXPECT_EQ("011", formatter_->InputDigit('1', &result_));
567   EXPECT_EQ("011 7", formatter_->InputDigit('7', &result_));
568   EXPECT_EQ("011 70", formatter_->InputDigit('0', &result_));
569   EXPECT_EQ("011 703", formatter_->InputDigit('3', &result_));
570   EXPECT_EQ("011 7031", formatter_->InputDigit('1', &result_));
571   EXPECT_EQ("011 7031-3", formatter_->InputDigit('3', &result_));
572   EXPECT_EQ("011 7031-30", formatter_->InputDigit('0', &result_));
573   EXPECT_EQ("011 7031-300", formatter_->InputDigit('0', &result_));
574   EXPECT_EQ("011 7031-3000", formatter_->InputDigit('0', &result_));
575 }
576 
TEST_F(AsYouTypeFormatterTest,AYTF_ARMobile)577 TEST_F(AsYouTypeFormatterTest, AYTF_ARMobile) {
578   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::AR()));
579 
580   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
581   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
582   EXPECT_EQ("+54 ", formatter_->InputDigit('4', &result_));
583   EXPECT_EQ("+54 9", formatter_->InputDigit('9', &result_));
584   EXPECT_EQ("+54 91", formatter_->InputDigit('1', &result_));
585   EXPECT_EQ("+54 9 11", formatter_->InputDigit('1', &result_));
586   EXPECT_EQ("+54 9 11 2", formatter_->InputDigit('2', &result_));
587   EXPECT_EQ("+54 9 11 23", formatter_->InputDigit('3', &result_));
588   EXPECT_EQ("+54 9 11 231", formatter_->InputDigit('1', &result_));
589   EXPECT_EQ("+54 9 11 2312", formatter_->InputDigit('2', &result_));
590   EXPECT_EQ("+54 9 11 2312 1", formatter_->InputDigit('1', &result_));
591   EXPECT_EQ("+54 9 11 2312 12", formatter_->InputDigit('2', &result_));
592   EXPECT_EQ("+54 9 11 2312 123", formatter_->InputDigit('3', &result_));
593   EXPECT_EQ("+54 9 11 2312 1234", formatter_->InputDigit('4', &result_));
594 }
595 
TEST_F(AsYouTypeFormatterTest,AYTF_KR)596 TEST_F(AsYouTypeFormatterTest, AYTF_KR) {
597   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::KR()));
598 
599   // +82 51 234 5678
600   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
601   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
602   EXPECT_EQ("+82 ", formatter_->InputDigit('2', &result_));
603   EXPECT_EQ("+82 5", formatter_->InputDigit('5', &result_));
604   EXPECT_EQ("+82 51", formatter_->InputDigit('1', &result_));
605   EXPECT_EQ("+82 51-2", formatter_->InputDigit('2', &result_));
606   EXPECT_EQ("+82 51-23", formatter_->InputDigit('3', &result_));
607   EXPECT_EQ("+82 51-234", formatter_->InputDigit('4', &result_));
608   EXPECT_EQ("+82 51-234-5", formatter_->InputDigit('5', &result_));
609   EXPECT_EQ("+82 51-234-56", formatter_->InputDigit('6', &result_));
610   EXPECT_EQ("+82 51-234-567", formatter_->InputDigit('7', &result_));
611   EXPECT_EQ("+82 51-234-5678", formatter_->InputDigit('8', &result_));
612 
613   // +82 2 531 5678
614   formatter_->Clear();
615   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
616   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
617   EXPECT_EQ("+82 ", formatter_->InputDigit('2', &result_));
618   EXPECT_EQ("+82 2", formatter_->InputDigit('2', &result_));
619   EXPECT_EQ("+82 25", formatter_->InputDigit('5', &result_));
620   EXPECT_EQ("+82 2-53", formatter_->InputDigit('3', &result_));
621   EXPECT_EQ("+82 2-531", formatter_->InputDigit('1', &result_));
622   EXPECT_EQ("+82 2-531-5", formatter_->InputDigit('5', &result_));
623   EXPECT_EQ("+82 2-531-56", formatter_->InputDigit('6', &result_));
624   EXPECT_EQ("+82 2-531-567", formatter_->InputDigit('7', &result_));
625   EXPECT_EQ("+82 2-531-5678", formatter_->InputDigit('8', &result_));
626 
627   // +82 2 3665 5678
628   formatter_->Clear();
629   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
630   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
631   EXPECT_EQ("+82 ", formatter_->InputDigit('2', &result_));
632   EXPECT_EQ("+82 2", formatter_->InputDigit('2', &result_));
633   EXPECT_EQ("+82 23", formatter_->InputDigit('3', &result_));
634   EXPECT_EQ("+82 2-36", formatter_->InputDigit('6', &result_));
635   EXPECT_EQ("+82 2-366", formatter_->InputDigit('6', &result_));
636   EXPECT_EQ("+82 2-3665", formatter_->InputDigit('5', &result_));
637   EXPECT_EQ("+82 2-3665-5", formatter_->InputDigit('5', &result_));
638   EXPECT_EQ("+82 2-3665-56", formatter_->InputDigit('6', &result_));
639   EXPECT_EQ("+82 2-3665-567", formatter_->InputDigit('7', &result_));
640   EXPECT_EQ("+82 2-3665-5678", formatter_->InputDigit('8', &result_));
641 
642   // 02-114
643   formatter_->Clear();
644   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
645   EXPECT_EQ("02", formatter_->InputDigit('2', &result_));
646   EXPECT_EQ("021", formatter_->InputDigit('1', &result_));
647   EXPECT_EQ("02-11", formatter_->InputDigit('1', &result_));
648   EXPECT_EQ("02-114", formatter_->InputDigit('4', &result_));
649 
650   // 02-1300
651   formatter_->Clear();
652   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
653   EXPECT_EQ("02", formatter_->InputDigit('2', &result_));
654   EXPECT_EQ("021", formatter_->InputDigit('1', &result_));
655   EXPECT_EQ("02-13", formatter_->InputDigit('3', &result_));
656   EXPECT_EQ("02-130", formatter_->InputDigit('0', &result_));
657   EXPECT_EQ("02-1300", formatter_->InputDigit('0', &result_));
658 
659   // 011-456-7890
660   formatter_->Clear();
661   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
662   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
663   EXPECT_EQ("011", formatter_->InputDigit('1', &result_));
664   EXPECT_EQ("011-4", formatter_->InputDigit('4', &result_));
665   EXPECT_EQ("011-45", formatter_->InputDigit('5', &result_));
666   EXPECT_EQ("011-456", formatter_->InputDigit('6', &result_));
667   EXPECT_EQ("011-456-7", formatter_->InputDigit('7', &result_));
668   EXPECT_EQ("011-456-78", formatter_->InputDigit('8', &result_));
669   EXPECT_EQ("011-456-789", formatter_->InputDigit('9', &result_));
670   EXPECT_EQ("011-456-7890", formatter_->InputDigit('0', &result_));
671 
672   // 011-9876-7890
673   formatter_->Clear();
674   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
675   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
676   EXPECT_EQ("011", formatter_->InputDigit('1', &result_));
677   EXPECT_EQ("011-9", formatter_->InputDigit('9', &result_));
678   EXPECT_EQ("011-98", formatter_->InputDigit('8', &result_));
679   EXPECT_EQ("011-987", formatter_->InputDigit('7', &result_));
680   EXPECT_EQ("011-9876", formatter_->InputDigit('6', &result_));
681   EXPECT_EQ("011-9876-7", formatter_->InputDigit('7', &result_));
682   EXPECT_EQ("011-9876-78", formatter_->InputDigit('8', &result_));
683   EXPECT_EQ("011-9876-789", formatter_->InputDigit('9', &result_));
684   EXPECT_EQ("011-9876-7890", formatter_->InputDigit('0', &result_));
685 }
686 
TEST_F(AsYouTypeFormatterTest,AYTF_MX)687 TEST_F(AsYouTypeFormatterTest, AYTF_MX) {
688   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::MX()));
689 
690   // +52 800 123 4567
691   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
692   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
693   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
694   EXPECT_EQ("+52 8", formatter_->InputDigit('8', &result_));
695   EXPECT_EQ("+52 80", formatter_->InputDigit('0', &result_));
696   EXPECT_EQ("+52 800", formatter_->InputDigit('0', &result_));
697   EXPECT_EQ("+52 800 1", formatter_->InputDigit('1', &result_));
698   EXPECT_EQ("+52 800 12", formatter_->InputDigit('2', &result_));
699   EXPECT_EQ("+52 800 123", formatter_->InputDigit('3', &result_));
700   EXPECT_EQ("+52 800 123 4", formatter_->InputDigit('4', &result_));
701   EXPECT_EQ("+52 800 123 45", formatter_->InputDigit('5', &result_));
702   EXPECT_EQ("+52 800 123 456", formatter_->InputDigit('6', &result_));
703   EXPECT_EQ("+52 800 123 4567", formatter_->InputDigit('7', &result_));
704 
705   // +529011234567, proactively ensuring that no formatting is applied,
706   // where a format is chosen that would otherwise have led to some digits
707   // being dropped.
708   formatter_->Clear();
709   EXPECT_EQ("9", formatter_->InputDigit('9', &result_));
710   EXPECT_EQ("90", formatter_->InputDigit('0', &result_));
711   EXPECT_EQ("901", formatter_->InputDigit('1', &result_));
712   EXPECT_EQ("9011", formatter_->InputDigit('1', &result_));
713   EXPECT_EQ("90112", formatter_->InputDigit('2', &result_));
714   EXPECT_EQ("901123", formatter_->InputDigit('3', &result_));
715   EXPECT_EQ("9011234", formatter_->InputDigit('4', &result_));
716   EXPECT_EQ("90112345", formatter_->InputDigit('5', &result_));
717   EXPECT_EQ("901123456", formatter_->InputDigit('6', &result_));
718   EXPECT_EQ("9011234567", formatter_->InputDigit('7', &result_));
719 
720   // +52 55 1234 5678
721   formatter_->Clear();
722   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
723   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
724   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
725   EXPECT_EQ("+52 5", formatter_->InputDigit('5', &result_));
726   EXPECT_EQ("+52 55", formatter_->InputDigit('5', &result_));
727   EXPECT_EQ("+52 55 1", formatter_->InputDigit('1', &result_));
728   EXPECT_EQ("+52 55 12", formatter_->InputDigit('2', &result_));
729   EXPECT_EQ("+52 55 123", formatter_->InputDigit('3', &result_));
730   EXPECT_EQ("+52 55 1234", formatter_->InputDigit('4', &result_));
731   EXPECT_EQ("+52 55 1234 5", formatter_->InputDigit('5', &result_));
732   EXPECT_EQ("+52 55 1234 56", formatter_->InputDigit('6', &result_));
733   EXPECT_EQ("+52 55 1234 567", formatter_->InputDigit('7', &result_));
734   EXPECT_EQ("+52 55 1234 5678", formatter_->InputDigit('8', &result_));
735 
736   // +52 212 345 6789
737   formatter_->Clear();
738   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
739   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
740   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
741   EXPECT_EQ("+52 2", formatter_->InputDigit('2', &result_));
742   EXPECT_EQ("+52 21", formatter_->InputDigit('1', &result_));
743   EXPECT_EQ("+52 212", formatter_->InputDigit('2', &result_));
744   EXPECT_EQ("+52 212 3", formatter_->InputDigit('3', &result_));
745   EXPECT_EQ("+52 212 34", formatter_->InputDigit('4', &result_));
746   EXPECT_EQ("+52 212 345", formatter_->InputDigit('5', &result_));
747   EXPECT_EQ("+52 212 345 6", formatter_->InputDigit('6', &result_));
748   EXPECT_EQ("+52 212 345 67", formatter_->InputDigit('7', &result_));
749   EXPECT_EQ("+52 212 345 678", formatter_->InputDigit('8', &result_));
750   EXPECT_EQ("+52 212 345 6789", formatter_->InputDigit('9', &result_));
751 
752   // +52 1 55 1234 5678
753   formatter_->Clear();
754   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
755   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
756   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
757   EXPECT_EQ("+52 1", formatter_->InputDigit('1', &result_));
758   EXPECT_EQ("+52 15", formatter_->InputDigit('5', &result_));
759   EXPECT_EQ("+52 1 55", formatter_->InputDigit('5', &result_));
760   EXPECT_EQ("+52 1 55 1", formatter_->InputDigit('1', &result_));
761   EXPECT_EQ("+52 1 55 12", formatter_->InputDigit('2', &result_));
762   EXPECT_EQ("+52 1 55 123", formatter_->InputDigit('3', &result_));
763   EXPECT_EQ("+52 1 55 1234", formatter_->InputDigit('4', &result_));
764   EXPECT_EQ("+52 1 55 1234 5", formatter_->InputDigit('5', &result_));
765   EXPECT_EQ("+52 1 55 1234 56", formatter_->InputDigit('6', &result_));
766   EXPECT_EQ("+52 1 55 1234 567", formatter_->InputDigit('7', &result_));
767   EXPECT_EQ("+52 1 55 1234 5678", formatter_->InputDigit('8', &result_));
768 
769   // +52 1 541 234 5678
770   formatter_->Clear();
771   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
772   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
773   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
774   EXPECT_EQ("+52 1", formatter_->InputDigit('1', &result_));
775   EXPECT_EQ("+52 15", formatter_->InputDigit('5', &result_));
776   EXPECT_EQ("+52 1 54", formatter_->InputDigit('4', &result_));
777   EXPECT_EQ("+52 1 541", formatter_->InputDigit('1', &result_));
778   EXPECT_EQ("+52 1 541 2", formatter_->InputDigit('2', &result_));
779   EXPECT_EQ("+52 1 541 23", formatter_->InputDigit('3', &result_));
780   EXPECT_EQ("+52 1 541 234", formatter_->InputDigit('4', &result_));
781   EXPECT_EQ("+52 1 541 234 5", formatter_->InputDigit('5', &result_));
782   EXPECT_EQ("+52 1 541 234 56", formatter_->InputDigit('6', &result_));
783   EXPECT_EQ("+52 1 541 234 567", formatter_->InputDigit('7', &result_));
784   EXPECT_EQ("+52 1 541 234 5678", formatter_->InputDigit('8', &result_));
785 }
786 
TEST_F(AsYouTypeFormatterTest,AYTF_International_Toll_Free)787 TEST_F(AsYouTypeFormatterTest, AYTF_International_Toll_Free) {
788   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
789   // +800 1234 5678
790   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
791   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
792   EXPECT_EQ("+80", formatter_->InputDigit('0', &result_));
793   EXPECT_EQ("+800 ", formatter_->InputDigit('0', &result_));
794   EXPECT_EQ("+800 1", formatter_->InputDigit('1', &result_));
795   EXPECT_EQ("+800 12", formatter_->InputDigit('2', &result_));
796   EXPECT_EQ("+800 123", formatter_->InputDigit('3', &result_));
797   EXPECT_EQ("+800 1234", formatter_->InputDigit('4', &result_));
798   EXPECT_EQ("+800 1234 5", formatter_->InputDigit('5', &result_));
799   EXPECT_EQ("+800 1234 56", formatter_->InputDigit('6', &result_));
800   EXPECT_EQ("+800 1234 567", formatter_->InputDigit('7', &result_));
801   EXPECT_EQ("+800 1234 5678", formatter_->InputDigit('8', &result_));
802 }
803 
TEST_F(AsYouTypeFormatterTest,AYTF_MultipleLeadingDigitPatterns)804 TEST_F(AsYouTypeFormatterTest, AYTF_MultipleLeadingDigitPatterns) {
805   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::JP()));
806 
807   // +81 50 2345 6789
808   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
809   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
810   EXPECT_EQ("+81 ", formatter_->InputDigit('1', &result_));
811   EXPECT_EQ("+81 5", formatter_->InputDigit('5', &result_));
812   EXPECT_EQ("+81 50", formatter_->InputDigit('0', &result_));
813   EXPECT_EQ("+81 50 2", formatter_->InputDigit('2', &result_));
814   EXPECT_EQ("+81 50 23", formatter_->InputDigit('3', &result_));
815   EXPECT_EQ("+81 50 234", formatter_->InputDigit('4', &result_));
816   EXPECT_EQ("+81 50 2345", formatter_->InputDigit('5', &result_));
817   EXPECT_EQ("+81 50 2345 6", formatter_->InputDigit('6', &result_));
818   EXPECT_EQ("+81 50 2345 67", formatter_->InputDigit('7', &result_));
819   EXPECT_EQ("+81 50 2345 678", formatter_->InputDigit('8', &result_));
820   EXPECT_EQ("+81 50 2345 6789", formatter_->InputDigit('9', &result_));
821 
822   // +81 222 12 5678
823   formatter_->Clear();
824   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
825   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
826   EXPECT_EQ("+81 ", formatter_->InputDigit('1', &result_));
827   EXPECT_EQ("+81 2", formatter_->InputDigit('2', &result_));
828   EXPECT_EQ("+81 22", formatter_->InputDigit('2', &result_));
829   EXPECT_EQ("+81 22 2", formatter_->InputDigit('2', &result_));
830   EXPECT_EQ("+81 22 21", formatter_->InputDigit('1', &result_));
831   EXPECT_EQ("+81 2221 2", formatter_->InputDigit('2', &result_));
832   EXPECT_EQ("+81 222 12 5", formatter_->InputDigit('5', &result_));
833   EXPECT_EQ("+81 222 12 56", formatter_->InputDigit('6', &result_));
834   EXPECT_EQ("+81 222 12 567", formatter_->InputDigit('7', &result_));
835   EXPECT_EQ("+81 222 12 5678", formatter_->InputDigit('8', &result_));
836 
837   // 011113
838   formatter_->Clear();
839   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
840   EXPECT_EQ("01", formatter_->InputDigit('1', &result_));
841   EXPECT_EQ("011", formatter_->InputDigit('1', &result_));
842   EXPECT_EQ("011 1", formatter_->InputDigit('1', &result_));
843   EXPECT_EQ("011 11", formatter_->InputDigit('1', &result_));
844   EXPECT_EQ("011113", formatter_->InputDigit('3', &result_));
845 
846   // +81 3332 2 5678
847   formatter_->Clear();
848   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
849   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
850   EXPECT_EQ("+81 ", formatter_->InputDigit('1', &result_));
851   EXPECT_EQ("+81 3", formatter_->InputDigit('3', &result_));
852   EXPECT_EQ("+81 33", formatter_->InputDigit('3', &result_));
853   EXPECT_EQ("+81 33 3", formatter_->InputDigit('3', &result_));
854   EXPECT_EQ("+81 3332", formatter_->InputDigit('2', &result_));
855   EXPECT_EQ("+81 3332 2", formatter_->InputDigit('2', &result_));
856   EXPECT_EQ("+81 3332 2 5", formatter_->InputDigit('5', &result_));
857   EXPECT_EQ("+81 3332 2 56", formatter_->InputDigit('6', &result_));
858   EXPECT_EQ("+81 3332 2 567", formatter_->InputDigit('7', &result_));
859   EXPECT_EQ("+81 3332 2 5678", formatter_->InputDigit('8', &result_));
860 }
861 
TEST_F(AsYouTypeFormatterTest,AYTF_LongIDD_AU)862 TEST_F(AsYouTypeFormatterTest, AYTF_LongIDD_AU) {
863   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::AU()));
864   // 0011 1 650 253 2250
865   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
866   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
867   EXPECT_EQ("001", formatter_->InputDigit('1', &result_));
868   EXPECT_EQ("0011", formatter_->InputDigit('1', &result_));
869   EXPECT_EQ("0011 1 ", formatter_->InputDigit('1', &result_));
870   EXPECT_EQ("0011 1 6", formatter_->InputDigit('6', &result_));
871   EXPECT_EQ("0011 1 65", formatter_->InputDigit('5', &result_));
872   EXPECT_EQ("0011 1 650", formatter_->InputDigit('0', &result_));
873   EXPECT_EQ("0011 1 650 2", formatter_->InputDigit('2', &result_));
874   EXPECT_EQ("0011 1 650 25", formatter_->InputDigit('5', &result_));
875   EXPECT_EQ("0011 1 650 253", formatter_->InputDigit('3', &result_));
876   EXPECT_EQ("0011 1 650 253 2", formatter_->InputDigit('2', &result_));
877   EXPECT_EQ("0011 1 650 253 22", formatter_->InputDigit('2', &result_));
878   EXPECT_EQ("0011 1 650 253 222", formatter_->InputDigit('2', &result_));
879   EXPECT_EQ("0011 1 650 253 2222", formatter_->InputDigit('2', &result_));
880 
881   // 0011 81 3332 2 5678
882   formatter_->Clear();
883   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
884   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
885   EXPECT_EQ("001", formatter_->InputDigit('1', &result_));
886   EXPECT_EQ("0011", formatter_->InputDigit('1', &result_));
887   EXPECT_EQ("00118", formatter_->InputDigit('8', &result_));
888   EXPECT_EQ("0011 81 ", formatter_->InputDigit('1', &result_));
889   EXPECT_EQ("0011 81 3", formatter_->InputDigit('3', &result_));
890   EXPECT_EQ("0011 81 33", formatter_->InputDigit('3', &result_));
891   EXPECT_EQ("0011 81 33 3", formatter_->InputDigit('3', &result_));
892   EXPECT_EQ("0011 81 3332", formatter_->InputDigit('2', &result_));
893   EXPECT_EQ("0011 81 3332 2", formatter_->InputDigit('2', &result_));
894   EXPECT_EQ("0011 81 3332 2 5", formatter_->InputDigit('5', &result_));
895   EXPECT_EQ("0011 81 3332 2 56", formatter_->InputDigit('6', &result_));
896   EXPECT_EQ("0011 81 3332 2 567", formatter_->InputDigit('7', &result_));
897   EXPECT_EQ("0011 81 3332 2 5678", formatter_->InputDigit('8', &result_));
898 
899   // 0011 244 250 253 222
900   formatter_->Clear();
901   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
902   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
903   EXPECT_EQ("001", formatter_->InputDigit('1', &result_));
904   EXPECT_EQ("0011", formatter_->InputDigit('1', &result_));
905   EXPECT_EQ("00112", formatter_->InputDigit('2', &result_));
906   EXPECT_EQ("001124", formatter_->InputDigit('4', &result_));
907   EXPECT_EQ("0011 244 ", formatter_->InputDigit('4', &result_));
908   EXPECT_EQ("0011 244 2", formatter_->InputDigit('2', &result_));
909   EXPECT_EQ("0011 244 25", formatter_->InputDigit('5', &result_));
910   EXPECT_EQ("0011 244 250", formatter_->InputDigit('0', &result_));
911   EXPECT_EQ("0011 244 250 2", formatter_->InputDigit('2', &result_));
912   EXPECT_EQ("0011 244 250 25", formatter_->InputDigit('5', &result_));
913   EXPECT_EQ("0011 244 250 253", formatter_->InputDigit('3', &result_));
914   EXPECT_EQ("0011 244 250 253 2", formatter_->InputDigit('2', &result_));
915   EXPECT_EQ("0011 244 250 253 22", formatter_->InputDigit('2', &result_));
916   EXPECT_EQ("0011 244 250 253 222", formatter_->InputDigit('2', &result_));
917 }
918 
TEST_F(AsYouTypeFormatterTest,AYTF_LongIDD_KR)919 TEST_F(AsYouTypeFormatterTest, AYTF_LongIDD_KR) {
920   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::KR()));
921   // 00300 1 650 253 2250
922   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
923   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
924   EXPECT_EQ("003", formatter_->InputDigit('3', &result_));
925   EXPECT_EQ("0030", formatter_->InputDigit('0', &result_));
926   EXPECT_EQ("00300", formatter_->InputDigit('0', &result_));
927   EXPECT_EQ("00300 1 ", formatter_->InputDigit('1', &result_));
928   EXPECT_EQ("00300 1 6", formatter_->InputDigit('6', &result_));
929   EXPECT_EQ("00300 1 65", formatter_->InputDigit('5', &result_));
930   EXPECT_EQ("00300 1 650", formatter_->InputDigit('0', &result_));
931   EXPECT_EQ("00300 1 650 2", formatter_->InputDigit('2', &result_));
932   EXPECT_EQ("00300 1 650 25", formatter_->InputDigit('5', &result_));
933   EXPECT_EQ("00300 1 650 253", formatter_->InputDigit('3', &result_));
934   EXPECT_EQ("00300 1 650 253 2", formatter_->InputDigit('2', &result_));
935   EXPECT_EQ("00300 1 650 253 22", formatter_->InputDigit('2', &result_));
936   EXPECT_EQ("00300 1 650 253 222", formatter_->InputDigit('2', &result_));
937   EXPECT_EQ("00300 1 650 253 2222", formatter_->InputDigit('2', &result_));
938 }
939 
TEST_F(AsYouTypeFormatterTest,AYTF_LongNDD_KR)940 TEST_F(AsYouTypeFormatterTest, AYTF_LongNDD_KR) {
941   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::KR()));
942   // 08811-9876-7890
943   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
944   EXPECT_EQ("08", formatter_->InputDigit('8', &result_));
945   EXPECT_EQ("088", formatter_->InputDigit('8', &result_));
946   EXPECT_EQ("0881", formatter_->InputDigit('1', &result_));
947   EXPECT_EQ("08811", formatter_->InputDigit('1', &result_));
948   EXPECT_EQ("08811-9", formatter_->InputDigit('9', &result_));
949   EXPECT_EQ("08811-98", formatter_->InputDigit('8', &result_));
950   EXPECT_EQ("08811-987", formatter_->InputDigit('7', &result_));
951   EXPECT_EQ("08811-9876", formatter_->InputDigit('6', &result_));
952   EXPECT_EQ("08811-9876-7", formatter_->InputDigit('7', &result_));
953   EXPECT_EQ("08811-9876-78", formatter_->InputDigit('8', &result_));
954   EXPECT_EQ("08811-9876-789", formatter_->InputDigit('9', &result_));
955   EXPECT_EQ("08811-9876-7890", formatter_->InputDigit('0', &result_));
956 
957   // 08500 11-9876-7890
958   formatter_->Clear();
959   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
960   EXPECT_EQ("08", formatter_->InputDigit('8', &result_));
961   EXPECT_EQ("085", formatter_->InputDigit('5', &result_));
962   EXPECT_EQ("0850", formatter_->InputDigit('0', &result_));
963   EXPECT_EQ("08500 ", formatter_->InputDigit('0', &result_));
964   EXPECT_EQ("08500 1", formatter_->InputDigit('1', &result_));
965   EXPECT_EQ("08500 11", formatter_->InputDigit('1', &result_));
966   EXPECT_EQ("08500 11-9", formatter_->InputDigit('9', &result_));
967   EXPECT_EQ("08500 11-98", formatter_->InputDigit('8', &result_));
968   EXPECT_EQ("08500 11-987", formatter_->InputDigit('7', &result_));
969   EXPECT_EQ("08500 11-9876", formatter_->InputDigit('6', &result_));
970   EXPECT_EQ("08500 11-9876-7", formatter_->InputDigit('7', &result_));
971   EXPECT_EQ("08500 11-9876-78", formatter_->InputDigit('8', &result_));
972   EXPECT_EQ("08500 11-9876-789", formatter_->InputDigit('9', &result_));
973   EXPECT_EQ("08500 11-9876-7890", formatter_->InputDigit('0', &result_));
974 }
975 
TEST_F(AsYouTypeFormatterTest,AYTF_LongNDD_SG)976 TEST_F(AsYouTypeFormatterTest, AYTF_LongNDD_SG) {
977   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::SG()));
978   // 777777 9876 7890
979   EXPECT_EQ("7", formatter_->InputDigit('7', &result_));
980   EXPECT_EQ("77", formatter_->InputDigit('7', &result_));
981   EXPECT_EQ("777", formatter_->InputDigit('7', &result_));
982   EXPECT_EQ("7777", formatter_->InputDigit('7', &result_));
983   EXPECT_EQ("77777", formatter_->InputDigit('7', &result_));
984   EXPECT_EQ("777777 ", formatter_->InputDigit('7', &result_));
985   EXPECT_EQ("777777 9", formatter_->InputDigit('9', &result_));
986   EXPECT_EQ("777777 98", formatter_->InputDigit('8', &result_));
987   EXPECT_EQ("777777 987", formatter_->InputDigit('7', &result_));
988   EXPECT_EQ("777777 9876", formatter_->InputDigit('6', &result_));
989   EXPECT_EQ("777777 9876 7", formatter_->InputDigit('7', &result_));
990   EXPECT_EQ("777777 9876 78", formatter_->InputDigit('8', &result_));
991   EXPECT_EQ("777777 9876 789", formatter_->InputDigit('9', &result_));
992   EXPECT_EQ("777777 9876 7890", formatter_->InputDigit('0', &result_));
993 }
994 
TEST_F(AsYouTypeFormatterTest,AYTF_ShortNumberFormattingFix_AU)995 TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_AU) {
996   // For Australia, the national prefix is not optional when formatting.
997   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::AU()));
998 
999   // 1234567890 - For leading digit 1, the national prefix formatting rule has
1000   // first group only.
1001   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1002   EXPECT_EQ("12", formatter_->InputDigit('2', &result_));
1003   EXPECT_EQ("123", formatter_->InputDigit('3', &result_));
1004   EXPECT_EQ("1234", formatter_->InputDigit('4', &result_));
1005   EXPECT_EQ("1234 5", formatter_->InputDigit('5', &result_));
1006   EXPECT_EQ("1234 56", formatter_->InputDigit('6', &result_));
1007   EXPECT_EQ("1234 567", formatter_->InputDigit('7', &result_));
1008   EXPECT_EQ("1234 567 8", formatter_->InputDigit('8', &result_));
1009   EXPECT_EQ("1234 567 89", formatter_->InputDigit('9', &result_));
1010   EXPECT_EQ("1234 567 890", formatter_->InputDigit('0', &result_));
1011 
1012   // +61 1234 567 890 - Test the same number, but with the country code.
1013   formatter_->Clear();
1014   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
1015   EXPECT_EQ("+6", formatter_->InputDigit('6', &result_));
1016   EXPECT_EQ("+61 ", formatter_->InputDigit('1', &result_));
1017   EXPECT_EQ("+61 1", formatter_->InputDigit('1', &result_));
1018   EXPECT_EQ("+61 12", formatter_->InputDigit('2', &result_));
1019   EXPECT_EQ("+61 123", formatter_->InputDigit('3', &result_));
1020   EXPECT_EQ("+61 1234", formatter_->InputDigit('4', &result_));
1021   EXPECT_EQ("+61 1234 5", formatter_->InputDigit('5', &result_));
1022   EXPECT_EQ("+61 1234 56", formatter_->InputDigit('6', &result_));
1023   EXPECT_EQ("+61 1234 567", formatter_->InputDigit('7', &result_));
1024   EXPECT_EQ("+61 1234 567 8", formatter_->InputDigit('8', &result_));
1025   EXPECT_EQ("+61 1234 567 89", formatter_->InputDigit('9', &result_));
1026   EXPECT_EQ("+61 1234 567 890", formatter_->InputDigit('0', &result_));
1027 
1028   // 212345678 - For leading digit 2, the national prefix formatting rule puts
1029   // the national prefix before the first group.
1030   formatter_->Clear();
1031   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
1032   EXPECT_EQ("02", formatter_->InputDigit('2', &result_));
1033   EXPECT_EQ("021", formatter_->InputDigit('1', &result_));
1034   EXPECT_EQ("02 12", formatter_->InputDigit('2', &result_));
1035   EXPECT_EQ("02 123", formatter_->InputDigit('3', &result_));
1036   EXPECT_EQ("02 1234", formatter_->InputDigit('4', &result_));
1037   EXPECT_EQ("02 1234 5", formatter_->InputDigit('5', &result_));
1038   EXPECT_EQ("02 1234 56", formatter_->InputDigit('6', &result_));
1039   EXPECT_EQ("02 1234 567", formatter_->InputDigit('7', &result_));
1040   EXPECT_EQ("02 1234 5678", formatter_->InputDigit('8', &result_));
1041 
1042   // 212345678 - Test the same number, but without the leading 0.
1043   formatter_->Clear();
1044   EXPECT_EQ("2", formatter_->InputDigit('2', &result_));
1045   EXPECT_EQ("21", formatter_->InputDigit('1', &result_));
1046   EXPECT_EQ("212", formatter_->InputDigit('2', &result_));
1047   EXPECT_EQ("2123", formatter_->InputDigit('3', &result_));
1048   EXPECT_EQ("21234", formatter_->InputDigit('4', &result_));
1049   EXPECT_EQ("212345", formatter_->InputDigit('5', &result_));
1050   EXPECT_EQ("2123456", formatter_->InputDigit('6', &result_));
1051   EXPECT_EQ("21234567", formatter_->InputDigit('7', &result_));
1052   EXPECT_EQ("212345678", formatter_->InputDigit('8', &result_));
1053 
1054   // +61 2 1234 5678 - Test the same number, but with the country code.
1055   formatter_->Clear();
1056   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
1057   EXPECT_EQ("+6", formatter_->InputDigit('6', &result_));
1058   EXPECT_EQ("+61 ", formatter_->InputDigit('1', &result_));
1059   EXPECT_EQ("+61 2", formatter_->InputDigit('2', &result_));
1060   EXPECT_EQ("+61 21", formatter_->InputDigit('1', &result_));
1061   EXPECT_EQ("+61 2 12", formatter_->InputDigit('2', &result_));
1062   EXPECT_EQ("+61 2 123", formatter_->InputDigit('3', &result_));
1063   EXPECT_EQ("+61 2 1234", formatter_->InputDigit('4', &result_));
1064   EXPECT_EQ("+61 2 1234 5", formatter_->InputDigit('5', &result_));
1065   EXPECT_EQ("+61 2 1234 56", formatter_->InputDigit('6', &result_));
1066   EXPECT_EQ("+61 2 1234 567", formatter_->InputDigit('7', &result_));
1067   EXPECT_EQ("+61 2 1234 5678", formatter_->InputDigit('8', &result_));
1068 }
1069 
TEST_F(AsYouTypeFormatterTest,AYTF_ShortNumberFormattingFix_KR)1070 TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_KR) {
1071   // For Korea, the national prefix is not optional when formatting, and the
1072   // national prefix formatting rule doesn't consist of only the first group.
1073   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::KR()));
1074 
1075   // 111
1076   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1077   EXPECT_EQ("11", formatter_->InputDigit('1', &result_));
1078   EXPECT_EQ("111", formatter_->InputDigit('1', &result_));
1079 
1080   // 114
1081   formatter_->Clear();
1082   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1083   EXPECT_EQ("11", formatter_->InputDigit('1', &result_));
1084   EXPECT_EQ("114", formatter_->InputDigit('4', &result_));
1085 
1086   // 131212345 - Test a mobile number without the national prefix. Even though
1087   // it is not an emergency number, it should be formatted as a block.
1088   formatter_->Clear();
1089   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1090   EXPECT_EQ("13", formatter_->InputDigit('3', &result_));
1091   EXPECT_EQ("131", formatter_->InputDigit('1', &result_));
1092   EXPECT_EQ("1312", formatter_->InputDigit('2', &result_));
1093   EXPECT_EQ("13121", formatter_->InputDigit('1', &result_));
1094   EXPECT_EQ("131212", formatter_->InputDigit('2', &result_));
1095   EXPECT_EQ("1312123", formatter_->InputDigit('3', &result_));
1096   EXPECT_EQ("13121234", formatter_->InputDigit('4', &result_));
1097 
1098   // +82 131-2-1234 - Test the same number, but with the country code.
1099   formatter_->Clear();
1100   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
1101   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
1102   EXPECT_EQ("+82 ", formatter_->InputDigit('2', &result_));
1103   EXPECT_EQ("+82 1", formatter_->InputDigit('1', &result_));
1104   EXPECT_EQ("+82 13", formatter_->InputDigit('3', &result_));
1105   EXPECT_EQ("+82 131", formatter_->InputDigit('1', &result_));
1106   EXPECT_EQ("+82 131-2", formatter_->InputDigit('2', &result_));
1107   EXPECT_EQ("+82 131-2-1", formatter_->InputDigit('1', &result_));
1108   EXPECT_EQ("+82 131-2-12", formatter_->InputDigit('2', &result_));
1109   EXPECT_EQ("+82 131-2-123", formatter_->InputDigit('3', &result_));
1110   EXPECT_EQ("+82 131-2-1234", formatter_->InputDigit('4', &result_));
1111 }
1112 
TEST_F(AsYouTypeFormatterTest,AYTF_ShortNumberFormattingFix_MX)1113 TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_MX) {
1114   // For Mexico, the national prefix is optional when formatting.
1115   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::MX()));
1116 
1117   // 911
1118   EXPECT_EQ("9", formatter_->InputDigit('9', &result_));
1119   EXPECT_EQ("91", formatter_->InputDigit('1', &result_));
1120   EXPECT_EQ("911", formatter_->InputDigit('1', &result_));
1121 
1122   // 800 123 4567 - Test a toll-free number, which should have a formatting rule
1123   // applied to it even though it doesn't begin with the national prefix.
1124   formatter_->Clear();
1125   EXPECT_EQ("8", formatter_->InputDigit('8', &result_));
1126   EXPECT_EQ("80", formatter_->InputDigit('0', &result_));
1127   EXPECT_EQ("800", formatter_->InputDigit('0', &result_));
1128   EXPECT_EQ("800 1", formatter_->InputDigit('1', &result_));
1129   EXPECT_EQ("800 12", formatter_->InputDigit('2', &result_));
1130   EXPECT_EQ("800 123", formatter_->InputDigit('3', &result_));
1131   EXPECT_EQ("800 123 4", formatter_->InputDigit('4', &result_));
1132   EXPECT_EQ("800 123 45", formatter_->InputDigit('5', &result_));
1133   EXPECT_EQ("800 123 456", formatter_->InputDigit('6', &result_));
1134   EXPECT_EQ("800 123 4567", formatter_->InputDigit('7', &result_));
1135 
1136   // +52 800 123 4567 - Test the same number, but with the country code.
1137   formatter_->Clear();
1138   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
1139   EXPECT_EQ("+5", formatter_->InputDigit('5', &result_));
1140   EXPECT_EQ("+52 ", formatter_->InputDigit('2', &result_));
1141   EXPECT_EQ("+52 8", formatter_->InputDigit('8', &result_));
1142   EXPECT_EQ("+52 80", formatter_->InputDigit('0', &result_));
1143   EXPECT_EQ("+52 800", formatter_->InputDigit('0', &result_));
1144   EXPECT_EQ("+52 800 1", formatter_->InputDigit('1', &result_));
1145   EXPECT_EQ("+52 800 12", formatter_->InputDigit('2', &result_));
1146   EXPECT_EQ("+52 800 123", formatter_->InputDigit('3', &result_));
1147   EXPECT_EQ("+52 800 123 4", formatter_->InputDigit('4', &result_));
1148   EXPECT_EQ("+52 800 123 45", formatter_->InputDigit('5', &result_));
1149   EXPECT_EQ("+52 800 123 456", formatter_->InputDigit('6', &result_));
1150   EXPECT_EQ("+52 800 123 4567", formatter_->InputDigit('7', &result_));
1151 }
1152 
TEST_F(AsYouTypeFormatterTest,AYTF_NoNationalPrefix)1153 TEST_F(AsYouTypeFormatterTest, AYTF_NoNationalPrefix) {
1154   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::IT()));
1155 
1156   EXPECT_EQ("3", formatter_->InputDigit('3', &result_));
1157   EXPECT_EQ("33", formatter_->InputDigit('3', &result_));
1158   EXPECT_EQ("333", formatter_->InputDigit('3', &result_));
1159   EXPECT_EQ("333 3", formatter_->InputDigit('3', &result_));
1160   EXPECT_EQ("333 33", formatter_->InputDigit('3', &result_));
1161   EXPECT_EQ("333 333", formatter_->InputDigit('3', &result_));
1162 }
1163 
TEST_F(AsYouTypeFormatterTest,AYTF_NoNationalPrefixFormattingRule)1164 TEST_F(AsYouTypeFormatterTest, AYTF_NoNationalPrefixFormattingRule) {
1165   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::AO()));
1166 
1167   EXPECT_EQ("3", formatter_->InputDigit('3', &result_));
1168   EXPECT_EQ("33", formatter_->InputDigit('3', &result_));
1169   EXPECT_EQ("333", formatter_->InputDigit('3', &result_));
1170   EXPECT_EQ("333 3", formatter_->InputDigit('3', &result_));
1171   EXPECT_EQ("333 33", formatter_->InputDigit('3', &result_));
1172   EXPECT_EQ("333 333", formatter_->InputDigit('3', &result_));
1173 }
1174 
TEST_F(AsYouTypeFormatterTest,AYTF_ShortNumberFormattingFix_US)1175 TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_US) {
1176   // For the US, an initial 1 is treated specially.
1177   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US()));
1178 
1179   // 101 - Test that the initial 1 is not treated as a national prefix.
1180   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1181   EXPECT_EQ("10", formatter_->InputDigit('0', &result_));
1182   EXPECT_EQ("101", formatter_->InputDigit('1', &result_));
1183 
1184   // 112 - Test that the initial 1 is not treated as a national prefix.
1185   formatter_->Clear();
1186   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1187   EXPECT_EQ("11", formatter_->InputDigit('1', &result_));
1188   EXPECT_EQ("112", formatter_->InputDigit('2', &result_));
1189 
1190   // 122 - Test that the initial 1 is treated as a national prefix.
1191   formatter_->Clear();
1192   EXPECT_EQ("1", formatter_->InputDigit('1', &result_));
1193   EXPECT_EQ("12", formatter_->InputDigit('2', &result_));
1194   EXPECT_EQ("1 22", formatter_->InputDigit('2', &result_));
1195 }
1196 
TEST_F(AsYouTypeFormatterTest,AYTF_ClearNDDAfterIDDExtraction)1197 TEST_F(AsYouTypeFormatterTest, AYTF_ClearNDDAfterIDDExtraction) {
1198   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::KR()));
1199 
1200   // Check that when we have successfully extracted an IDD, the previously
1201   // extracted NDD is cleared since it is no longer valid.
1202   EXPECT_EQ("0", formatter_->InputDigit('0', &result_));
1203   EXPECT_EQ("00", formatter_->InputDigit('0', &result_));
1204   EXPECT_EQ("007", formatter_->InputDigit('7', &result_));
1205   EXPECT_EQ("0070", formatter_->InputDigit('0', &result_));
1206   EXPECT_EQ("00700", formatter_->InputDigit('0', &result_));
1207   EXPECT_EQ("0", GetExtractedNationalPrefix());
1208 
1209   // Once the IDD "00700" has been extracted, it no longer makes sense for the
1210   // initial "0" to be treated as an NDD.
1211   EXPECT_EQ("00700 1 ", formatter_->InputDigit('1', &result_));
1212   EXPECT_EQ("", GetExtractedNationalPrefix());
1213 
1214   EXPECT_EQ("00700 1 2", formatter_->InputDigit('2', &result_));
1215   EXPECT_EQ("00700 1 23", formatter_->InputDigit('3', &result_));
1216   EXPECT_EQ("00700 1 234", formatter_->InputDigit('4', &result_));
1217   EXPECT_EQ("00700 1 234 5", formatter_->InputDigit('5', &result_));
1218   EXPECT_EQ("00700 1 234 56", formatter_->InputDigit('6', &result_));
1219   EXPECT_EQ("00700 1 234 567", formatter_->InputDigit('7', &result_));
1220   EXPECT_EQ("00700 1 234 567 8", formatter_->InputDigit('8', &result_));
1221   EXPECT_EQ("00700 1 234 567 89", formatter_->InputDigit('9', &result_));
1222   EXPECT_EQ("00700 1 234 567 890", formatter_->InputDigit('0', &result_));
1223   EXPECT_EQ("00700 1 234 567 8901", formatter_->InputDigit('1', &result_));
1224   EXPECT_EQ("00700123456789012", formatter_->InputDigit('2', &result_));
1225   EXPECT_EQ("007001234567890123", formatter_->InputDigit('3', &result_));
1226   EXPECT_EQ("0070012345678901234", formatter_->InputDigit('4', &result_));
1227   EXPECT_EQ("00700123456789012345", formatter_->InputDigit('5', &result_));
1228   EXPECT_EQ("007001234567890123456", formatter_->InputDigit('6', &result_));
1229   EXPECT_EQ("0070012345678901234567", formatter_->InputDigit('7', &result_));
1230 }
1231 
TEST_F(AsYouTypeFormatterTest,NumberPatternsBecomingInvalidShouldNotResultInDigitLoss)1232 TEST_F(AsYouTypeFormatterTest,
1233        NumberPatternsBecomingInvalidShouldNotResultInDigitLoss) {
1234   formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::CN()));
1235 
1236   EXPECT_EQ("+", formatter_->InputDigit('+', &result_));
1237   EXPECT_EQ("+8", formatter_->InputDigit('8', &result_));
1238   EXPECT_EQ("+86 ", formatter_->InputDigit('6', &result_));
1239   EXPECT_EQ("+86 9", formatter_->InputDigit('9', &result_));
1240   EXPECT_EQ("+86 98", formatter_->InputDigit('8', &result_));
1241   EXPECT_EQ("+86 988", formatter_->InputDigit('8', &result_));
1242   EXPECT_EQ("+86 988 1", formatter_->InputDigit('1', &result_));
1243   // Now the number pattern is no longer valid because there are multiple
1244   // leading digit patterns; when we try again to extract a country code we
1245   // should ensure we use the last leading digit pattern, rather than the first
1246   // one such that it *thinks* it's found a valid formatting rule again.
1247   // https://github.com/google/libphonenumber/issues/437
1248   EXPECT_EQ("+8698812", formatter_->InputDigit('2', &result_));
1249   EXPECT_EQ("+86988123", formatter_->InputDigit('3', &result_));
1250   EXPECT_EQ("+869881234", formatter_->InputDigit('4', &result_));
1251   EXPECT_EQ("+8698812345", formatter_->InputDigit('5', &result_));
1252 }
1253 
1254 }  // namespace phonenumbers
1255 }  // namespace i18n
1256