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