OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/strings/string16.h" | |
6 #include "base/strings/utf_string_conversions.h" | |
7 #include "components/autofill/browser/autofill_profile.h" | |
8 #include "components/autofill/browser/field_types.h" | |
9 #include "components/autofill/browser/phone_number.h" | |
10 #include "components/autofill/browser/phone_number_i18n.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 namespace autofill { | |
14 | |
15 TEST(PhoneNumberTest, Matcher) { | |
16 AutofillProfile profile; | |
17 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); | |
18 // Set phone number so country_code == 1, city_code = 650, number = 2345678. | |
19 base::string16 phone(ASCIIToUTF16("1 [650] 234-5678")); | |
20 PhoneNumber phone_number(&profile); | |
21 phone_number.SetInfo(PHONE_HOME_WHOLE_NUMBER, phone, "US"); | |
22 | |
23 FieldTypeSet matching_types; | |
24 phone_number.GetMatchingTypes(base::string16(), "US", &matching_types); | |
25 EXPECT_EQ(1U, matching_types.size()); | |
26 EXPECT_TRUE(matching_types.find(EMPTY_TYPE) != matching_types.end()); | |
27 matching_types.clear(); | |
28 phone_number.GetMatchingTypes(ASCIIToUTF16("1"), "US", &matching_types); | |
29 EXPECT_EQ(1U, matching_types.size()); | |
30 EXPECT_TRUE(matching_types.find(PHONE_HOME_COUNTRY_CODE) != | |
31 matching_types.end()); | |
32 matching_types.clear(); | |
33 phone_number.GetMatchingTypes(ASCIIToUTF16("16"), "US", &matching_types); | |
34 EXPECT_EQ(0U, matching_types.size()); | |
35 phone_number.GetMatchingTypes(ASCIIToUTF16("165"), "US", &matching_types); | |
36 EXPECT_EQ(0U, matching_types.size()); | |
37 phone_number.GetMatchingTypes(ASCIIToUTF16("1650"), "US", &matching_types); | |
38 EXPECT_EQ(0U, matching_types.size()); | |
39 phone_number.GetMatchingTypes(ASCIIToUTF16("16502"), "US", &matching_types); | |
40 EXPECT_EQ(0U, matching_types.size()); | |
41 phone_number.GetMatchingTypes(ASCIIToUTF16("165023"), "US", &matching_types); | |
42 EXPECT_EQ(0U, matching_types.size()); | |
43 phone_number.GetMatchingTypes(ASCIIToUTF16("1650234"), "US", &matching_types); | |
44 EXPECT_EQ(0U, matching_types.size()); | |
45 matching_types.clear(); | |
46 phone_number.GetMatchingTypes(ASCIIToUTF16("16502345678"), "US", | |
47 &matching_types); | |
48 EXPECT_EQ(1U, matching_types.size()); | |
49 EXPECT_TRUE(matching_types.find(PHONE_HOME_WHOLE_NUMBER) != | |
50 matching_types.end()); | |
51 matching_types.clear(); | |
52 phone_number.GetMatchingTypes(ASCIIToUTF16("650"), "US", &matching_types); | |
53 EXPECT_EQ(1U, matching_types.size()); | |
54 EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_CODE) != | |
55 matching_types.end()); | |
56 matching_types.clear(); | |
57 phone_number.GetMatchingTypes(ASCIIToUTF16("2345678"), "US", &matching_types); | |
58 EXPECT_EQ(1U, matching_types.size()); | |
59 EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); | |
60 matching_types.clear(); | |
61 phone_number.GetMatchingTypes(ASCIIToUTF16("234"), "US", &matching_types); | |
62 EXPECT_EQ(1U, matching_types.size()); | |
63 EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); | |
64 matching_types.clear(); | |
65 phone_number.GetMatchingTypes(ASCIIToUTF16("5678"), "US", &matching_types); | |
66 EXPECT_EQ(1U, matching_types.size()); | |
67 EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); | |
68 matching_types.clear(); | |
69 phone_number.GetMatchingTypes(ASCIIToUTF16("2345"), "US", &matching_types); | |
70 EXPECT_EQ(0U, matching_types.size()); | |
71 matching_types.clear(); | |
72 phone_number.GetMatchingTypes(ASCIIToUTF16("6502345678"), "US", | |
73 &matching_types); | |
74 EXPECT_EQ(1U, matching_types.size()); | |
75 EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_AND_NUMBER) != | |
76 matching_types.end()); | |
77 matching_types.clear(); | |
78 phone_number.GetMatchingTypes(ASCIIToUTF16("(650)2345678"), "US", | |
79 &matching_types); | |
80 EXPECT_EQ(1U, matching_types.size()); | |
81 EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_AND_NUMBER) != | |
82 matching_types.end()); | |
83 } | |
84 | |
85 // Verify that PhoneNumber::SetInfo() correctly formats the incoming number. | |
86 TEST(PhoneNumberTest, SetInfo) { | |
87 AutofillProfile profile; | |
88 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); | |
89 | |
90 PhoneNumber phone(&profile); | |
91 EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
92 | |
93 // Set the formatted info directly. | |
94 EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, | |
95 ASCIIToUTF16("(650) 234-5678"), "US")); | |
96 EXPECT_EQ(ASCIIToUTF16("(650) 234-5678"), | |
97 phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
98 | |
99 // Unformatted numbers should be formatted. | |
100 EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, | |
101 ASCIIToUTF16("8887776666"), "US")); | |
102 EXPECT_EQ(ASCIIToUTF16("(888) 777-6666"), | |
103 phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
104 | |
105 // Differently formatted numbers should be re-formatted. | |
106 EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, | |
107 ASCIIToUTF16("800-432-8765"), "US")); | |
108 EXPECT_EQ(ASCIIToUTF16("(800) 432-8765"), | |
109 phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
110 | |
111 // Invalid numbers should not be stored. In the US, phone numbers cannot | |
112 // start with the digit '1'. | |
113 EXPECT_FALSE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, | |
114 ASCIIToUTF16("650111111"), "US")); | |
115 EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
116 } | |
117 | |
118 // Test that cached phone numbers are correctly invalidated and updated. | |
119 TEST(PhoneNumberTest, UpdateCachedPhoneNumber) { | |
120 AutofillProfile profile; | |
121 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); | |
122 | |
123 PhoneNumber phone(&profile); | |
124 phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("6502345678")); | |
125 EXPECT_EQ(ASCIIToUTF16("650"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); | |
126 | |
127 // Update the area code. | |
128 phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("8322345678")); | |
129 EXPECT_EQ(ASCIIToUTF16("832"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); | |
130 | |
131 // Change the phone number to have a UK format, but try to parse with the | |
132 // wrong locale. | |
133 phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789")); | |
134 EXPECT_EQ(base::string16(), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); | |
135 | |
136 // Now try parsing using the correct locale. Note that the profile's country | |
137 // code should override the app locale, which is still set to "US". | |
138 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("GB")); | |
139 phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789")); | |
140 EXPECT_EQ(ASCIIToUTF16("70"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); | |
141 } | |
142 | |
143 TEST(PhoneNumberTest, PhoneCombineHelper) { | |
144 AutofillProfile profile; | |
145 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); | |
146 | |
147 PhoneNumber::PhoneCombineHelper number1; | |
148 EXPECT_FALSE(number1.SetInfo(ADDRESS_BILLING_CITY, | |
149 ASCIIToUTF16("1"))); | |
150 EXPECT_TRUE(number1.SetInfo(PHONE_HOME_COUNTRY_CODE, | |
151 ASCIIToUTF16("1"))); | |
152 EXPECT_TRUE(number1.SetInfo(PHONE_HOME_CITY_CODE, | |
153 ASCIIToUTF16("650"))); | |
154 EXPECT_TRUE(number1.SetInfo(PHONE_HOME_NUMBER, | |
155 ASCIIToUTF16("2345678"))); | |
156 base::string16 parsed_phone; | |
157 EXPECT_TRUE(number1.ParseNumber(profile, "en-US", &parsed_phone)); | |
158 // International format as it has a country code. | |
159 EXPECT_EQ(ASCIIToUTF16("+1 650-234-5678"), parsed_phone); | |
160 | |
161 PhoneNumber::PhoneCombineHelper number3; | |
162 EXPECT_TRUE(number3.SetInfo(PHONE_HOME_CITY_CODE, | |
163 ASCIIToUTF16("650"))); | |
164 EXPECT_TRUE(number3.SetInfo(PHONE_HOME_NUMBER, | |
165 ASCIIToUTF16("2345680"))); | |
166 EXPECT_TRUE(number3.ParseNumber(profile, "en-US", &parsed_phone)); | |
167 // National format as it does not have a country code. | |
168 EXPECT_EQ(ASCIIToUTF16("(650) 234-5680"), parsed_phone); | |
169 | |
170 PhoneNumber::PhoneCombineHelper number4; | |
171 EXPECT_TRUE(number4.SetInfo(PHONE_HOME_CITY_CODE, | |
172 ASCIIToUTF16("123"))); // Incorrect city code. | |
173 EXPECT_TRUE(number4.SetInfo(PHONE_HOME_NUMBER, | |
174 ASCIIToUTF16("2345680"))); | |
175 EXPECT_FALSE(number4.ParseNumber(profile, "en-US", &parsed_phone)); | |
176 EXPECT_EQ(base::string16(), parsed_phone); | |
177 | |
178 PhoneNumber::PhoneCombineHelper number5; | |
179 EXPECT_TRUE(number5.SetInfo(PHONE_HOME_CITY_AND_NUMBER, | |
180 ASCIIToUTF16("6502345681"))); | |
181 EXPECT_TRUE(number5.ParseNumber(profile, "en-US", &parsed_phone)); | |
182 EXPECT_EQ(ASCIIToUTF16("(650) 234-5681"), parsed_phone); | |
183 | |
184 PhoneNumber::PhoneCombineHelper number6; | |
185 EXPECT_TRUE(number6.SetInfo(PHONE_HOME_CITY_CODE, | |
186 ASCIIToUTF16("650"))); | |
187 EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER, | |
188 ASCIIToUTF16("234"))); | |
189 EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER, | |
190 ASCIIToUTF16("5682"))); | |
191 EXPECT_TRUE(number6.ParseNumber(profile, "en-US", &parsed_phone)); | |
192 EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone); | |
193 | |
194 // Ensure parsing is possible when falling back to detecting the country code | |
195 // based on the app locale. | |
196 PhoneNumber::PhoneCombineHelper number7; | |
197 EXPECT_TRUE(number7.SetInfo(PHONE_HOME_CITY_CODE, | |
198 ASCIIToUTF16("650"))); | |
199 EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER, | |
200 ASCIIToUTF16("234"))); | |
201 EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER, | |
202 ASCIIToUTF16("5682"))); | |
203 EXPECT_TRUE(number7.ParseNumber(AutofillProfile(), "en-US", &parsed_phone)); | |
204 EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone); | |
205 } | |
206 | |
207 } // namespace autofill | |
OLD | NEW |