OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include "components/autofill/core/browser/autofill_field.h" |
| 6 |
5 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
6 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
7 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
8 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
9 #include "components/autofill/core/browser/autofill_field.h" | |
10 #include "components/autofill/core/browser/autofill_type.h" | 11 #include "components/autofill/core/browser/autofill_type.h" |
11 #include "components/autofill/core/browser/field_types.h" | 12 #include "components/autofill/core/browser/field_types.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
13 | 14 |
14 using base::ASCIIToUTF16; | 15 using base::ASCIIToUTF16; |
| 16 using base::UTF8ToUTF16; |
15 | 17 |
16 namespace autofill { | 18 namespace autofill { |
17 namespace { | 19 namespace { |
18 | 20 |
19 // Returns a FormFieldData object corresponding to a <select> field populated | 21 // Returns a FormFieldData object corresponding to a <select> field populated |
20 // with the given |options|. | 22 // with the given |options|. |
21 FormFieldData GenerateSelectFieldWithOptions(const char* const* options, | 23 FormFieldData GenerateSelectFieldWithOptions(const char* const* options, |
22 size_t options_size) { | 24 size_t options_size) { |
23 std::vector<base::string16> options16(options_size); | 25 std::vector<base::string16> options16(options_size); |
24 for (size_t i = 0; i < options_size; ++i) { | 26 for (size_t i = 0; i < options_size; ++i) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 // Field has autocomplete="off" set. | 119 // Field has autocomplete="off" set. |
118 field.should_autocomplete = false; | 120 field.should_autocomplete = false; |
119 EXPECT_FALSE(field.IsFieldFillable()); | 121 EXPECT_FALSE(field.IsFieldFillable()); |
120 } | 122 } |
121 | 123 |
122 TEST(AutofillFieldTest, FillPhoneNumber) { | 124 TEST(AutofillFieldTest, FillPhoneNumber) { |
123 AutofillField field; | 125 AutofillField field; |
124 field.SetHtmlType(HTML_TYPE_TEL_LOCAL_PREFIX, HtmlFieldMode()); | 126 field.SetHtmlType(HTML_TYPE_TEL_LOCAL_PREFIX, HtmlFieldMode()); |
125 | 127 |
126 // Fill with a non-phone number; should fill normally. | 128 // Fill with a non-phone number; should fill normally. |
127 AutofillField::FillFormField(field, ASCIIToUTF16("Oh hai"), "en-US", &field); | 129 AutofillField::FillFormField( |
| 130 field, ASCIIToUTF16("Oh hai"), "en-US", "en-US", &field); |
128 EXPECT_EQ(ASCIIToUTF16("Oh hai"), field.value); | 131 EXPECT_EQ(ASCIIToUTF16("Oh hai"), field.value); |
129 | 132 |
130 // Fill with a phone number; should fill just the prefix. | 133 // Fill with a phone number; should fill just the prefix. |
131 AutofillField::FillFormField(field, ASCIIToUTF16("5551234"), "en-US", &field); | 134 AutofillField::FillFormField( |
| 135 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); |
132 EXPECT_EQ(ASCIIToUTF16("555"), field.value); | 136 EXPECT_EQ(ASCIIToUTF16("555"), field.value); |
133 | 137 |
134 // Now reset the type, and set a max-length instead. | 138 // Now reset the type, and set a max-length instead. |
135 field.SetHtmlType(HTML_TYPE_UNKNOWN, HtmlFieldMode()); | 139 field.SetHtmlType(HTML_TYPE_UNKNOWN, HtmlFieldMode()); |
136 field.set_heuristic_type(PHONE_HOME_NUMBER); | 140 field.set_heuristic_type(PHONE_HOME_NUMBER); |
137 field.max_length = 4; | 141 field.max_length = 4; |
138 | 142 |
139 // Fill with a phone-number; should fill just the suffix. | 143 // Fill with a phone-number; should fill just the suffix. |
140 AutofillField::FillFormField(field, ASCIIToUTF16("5551234"), "en-US", &field); | 144 AutofillField::FillFormField( |
| 145 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); |
141 EXPECT_EQ(ASCIIToUTF16("1234"), field.value); | 146 EXPECT_EQ(ASCIIToUTF16("1234"), field.value); |
142 } | 147 } |
143 | 148 |
144 TEST(AutofillFieldTest, FillSelectControlByValue) { | 149 TEST(AutofillFieldTest, FillSelectControlByValue) { |
145 const char* const kOptions[] = { | 150 const char* const kOptions[] = { |
146 "Eenie", "Meenie", "Miney", "Mo", | 151 "Eenie", "Meenie", "Miney", "Mo", |
147 }; | 152 }; |
148 AutofillField field( | 153 AutofillField field( |
149 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), | 154 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), |
150 base::string16()); | 155 base::string16()); |
151 | 156 |
152 // Set semantically empty contents for each option, so that only the values | 157 // Set semantically empty contents for each option, so that only the values |
153 // can be used for matching. | 158 // can be used for matching. |
154 for (size_t i = 0; i < field.option_contents.size(); ++i) { | 159 for (size_t i = 0; i < field.option_contents.size(); ++i) { |
155 field.option_contents[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); | 160 field.option_contents[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); |
156 } | 161 } |
157 | 162 |
158 AutofillField::FillFormField(field, ASCIIToUTF16("Meenie"), "en-US", | 163 AutofillField::FillFormField( |
159 &field); | 164 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); |
160 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); | 165 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); |
161 } | 166 } |
162 | 167 |
163 TEST(AutofillFieldTest, FillSelectControlByContents) { | 168 TEST(AutofillFieldTest, FillSelectControlByContents) { |
164 const char* const kOptions[] = { | 169 const char* const kOptions[] = { |
165 "Eenie", "Meenie", "Miney", "Mo", | 170 "Eenie", "Meenie", "Miney", "Mo", |
166 }; | 171 }; |
167 AutofillField field( | 172 AutofillField field( |
168 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), | 173 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), |
169 base::string16()); | 174 base::string16()); |
170 | 175 |
171 // Set semantically empty values for each option, so that only the contents | 176 // Set semantically empty values for each option, so that only the contents |
172 // can be used for matching. | 177 // can be used for matching. |
173 for (size_t i = 0; i < field.option_values.size(); ++i) { | 178 for (size_t i = 0; i < field.option_values.size(); ++i) { |
174 field.option_values[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); | 179 field.option_values[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); |
175 } | 180 } |
176 | 181 |
177 AutofillField::FillFormField(field, ASCIIToUTF16("Miney"), "en-US", | 182 AutofillField::FillFormField( |
178 &field); | 183 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); |
179 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". | 184 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". |
180 } | 185 } |
181 | 186 |
182 TEST(AutofillFieldTest, FillSelectControlWithFullCountryNames) { | 187 TEST(AutofillFieldTest, FillSelectControlWithFullCountryNames) { |
183 const char* const kCountries[] = { | 188 const char* const kCountries[] = { |
184 "Albania", "Canada" | 189 "Albania", "Canada" |
185 }; | 190 }; |
186 AutofillField field( | 191 AutofillField field( |
187 GenerateSelectFieldWithOptions(kCountries, arraysize(kCountries)), | 192 GenerateSelectFieldWithOptions(kCountries, arraysize(kCountries)), |
188 base::string16()); | 193 base::string16()); |
189 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 194 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
190 | 195 |
191 AutofillField::FillFormField(field, ASCIIToUTF16("CA"), "en-US", &field); | 196 AutofillField::FillFormField( |
| 197 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
192 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); | 198 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); |
193 } | 199 } |
194 | 200 |
195 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { | 201 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { |
196 const char* const kCountries[] = { | 202 const char* const kCountries[] = { |
197 "AL", "CA" | 203 "AL", "CA" |
198 }; | 204 }; |
199 AutofillField field( | 205 AutofillField field( |
200 GenerateSelectFieldWithOptions(kCountries, arraysize(kCountries)), | 206 GenerateSelectFieldWithOptions(kCountries, arraysize(kCountries)), |
201 base::string16()); | 207 base::string16()); |
202 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 208 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
203 | 209 |
204 AutofillField::FillFormField(field, ASCIIToUTF16("Canada"), "en-US", &field); | 210 AutofillField::FillFormField( |
| 211 field, ASCIIToUTF16("Canada"), "en-US", "en-US", &field); |
205 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 212 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
206 } | 213 } |
207 | 214 |
208 TEST(AutofillFieldTest, FillSelectControlWithFullStateNames) { | 215 TEST(AutofillFieldTest, FillSelectControlWithFullStateNames) { |
209 const char* const kStates[] = { | 216 const char* const kStates[] = { |
210 "Alabama", "California" | 217 "Alabama", "California" |
211 }; | 218 }; |
212 AutofillField field( | 219 AutofillField field( |
213 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 220 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
214 base::string16()); | 221 base::string16()); |
215 field.set_heuristic_type(ADDRESS_HOME_STATE); | 222 field.set_heuristic_type(ADDRESS_HOME_STATE); |
216 | 223 |
217 AutofillField::FillFormField(field, ASCIIToUTF16("CA"), "en-US", &field); | 224 AutofillField::FillFormField( |
| 225 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
218 EXPECT_EQ(ASCIIToUTF16("California"), field.value); | 226 EXPECT_EQ(ASCIIToUTF16("California"), field.value); |
219 } | 227 } |
220 | 228 |
221 TEST(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { | 229 TEST(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { |
222 const char* const kStates[] = { | 230 const char* const kStates[] = { |
223 "AL", "CA" | 231 "AL", "CA" |
224 }; | 232 }; |
225 AutofillField field( | 233 AutofillField field( |
226 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 234 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
227 base::string16()); | 235 base::string16()); |
228 field.set_heuristic_type(ADDRESS_HOME_STATE); | 236 field.set_heuristic_type(ADDRESS_HOME_STATE); |
229 | 237 |
230 AutofillField::FillFormField(field, ASCIIToUTF16("California"), "en-US", | 238 AutofillField::FillFormField( |
231 &field); | 239 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
232 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 240 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
233 } | 241 } |
234 | 242 |
235 TEST(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { | 243 TEST(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { |
236 { | 244 { |
237 const char* const kStates[] = { | 245 const char* const kStates[] = { |
238 "SC - South Carolina", "CA - California", "NC - North Carolina", | 246 "SC - South Carolina", "CA - California", "NC - North Carolina", |
239 }; | 247 }; |
240 AutofillField field( | 248 AutofillField field( |
241 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 249 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
242 base::string16()); | 250 base::string16()); |
243 field.set_heuristic_type(ADDRESS_HOME_STATE); | 251 field.set_heuristic_type(ADDRESS_HOME_STATE); |
244 | 252 |
245 AutofillField::FillFormField(field, ASCIIToUTF16("California"), "en-US", | 253 AutofillField::FillFormField( |
246 &field); | 254 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
247 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); | 255 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); |
248 } | 256 } |
249 | 257 |
250 // Don't accidentally match "Virginia" to "West Virginia". | 258 // Don't accidentally match "Virginia" to "West Virginia". |
251 { | 259 { |
252 const char* const kStates[] = { | 260 const char* const kStates[] = { |
253 "WV - West Virginia", "VA - Virginia", "NV - North Virginia", | 261 "WV - West Virginia", "VA - Virginia", "NV - North Virginia", |
254 }; | 262 }; |
255 AutofillField field( | 263 AutofillField field( |
256 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 264 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
257 base::string16()); | 265 base::string16()); |
258 field.set_heuristic_type(ADDRESS_HOME_STATE); | 266 field.set_heuristic_type(ADDRESS_HOME_STATE); |
259 | 267 |
260 AutofillField::FillFormField(field, ASCIIToUTF16("Virginia"), "en-US", | 268 AutofillField::FillFormField( |
261 &field); | 269 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); |
262 EXPECT_EQ(ASCIIToUTF16("VA - Virginia"), field.value); | 270 EXPECT_EQ(ASCIIToUTF16("VA - Virginia"), field.value); |
263 } | 271 } |
264 | 272 |
265 // Do accidentally match "Virginia" to "West Virginia". NB: Ideally, Chrome | 273 // Do accidentally match "Virginia" to "West Virginia". NB: Ideally, Chrome |
266 // would fail this test. It's here to document behavior rather than enforce | 274 // would fail this test. It's here to document behavior rather than enforce |
267 // it. | 275 // it. |
268 { | 276 { |
269 const char* const kStates[] = { | 277 const char* const kStates[] = { |
270 "WV - West Virginia", "TX - Texas", | 278 "WV - West Virginia", "TX - Texas", |
271 }; | 279 }; |
272 AutofillField field( | 280 AutofillField field( |
273 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 281 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
274 base::string16()); | 282 base::string16()); |
275 field.set_heuristic_type(ADDRESS_HOME_STATE); | 283 field.set_heuristic_type(ADDRESS_HOME_STATE); |
276 | 284 |
277 AutofillField::FillFormField(field, ASCIIToUTF16("Virginia"), "en-US", | 285 AutofillField::FillFormField( |
278 &field); | 286 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); |
279 EXPECT_EQ(ASCIIToUTF16("WV - West Virginia"), field.value); | 287 EXPECT_EQ(ASCIIToUTF16("WV - West Virginia"), field.value); |
280 } | 288 } |
281 | 289 |
282 // Tests that substring matches work for full state names (a full token | 290 // Tests that substring matches work for full state names (a full token |
283 // match isn't required). Also tests that matches work for states with | 291 // match isn't required). Also tests that matches work for states with |
284 // whitespace in the middle. | 292 // whitespace in the middle. |
285 { | 293 { |
286 const char* const kStates[] = { | 294 const char* const kStates[] = { |
287 "California.", "North Carolina.", | 295 "California.", "North Carolina.", |
288 }; | 296 }; |
289 AutofillField field( | 297 AutofillField field( |
290 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 298 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
291 base::string16()); | 299 base::string16()); |
292 field.set_heuristic_type(ADDRESS_HOME_STATE); | 300 field.set_heuristic_type(ADDRESS_HOME_STATE); |
293 | 301 |
294 AutofillField::FillFormField(field, ASCIIToUTF16("North Carolina"), "en-US", | 302 AutofillField::FillFormField( |
295 &field); | 303 field, ASCIIToUTF16("North Carolina"), "en-US", "en-US", &field); |
296 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); | 304 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); |
297 } | 305 } |
298 } | 306 } |
299 | 307 |
300 TEST(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { | 308 TEST(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { |
301 { | 309 { |
302 const char* const kStates[] = { | 310 const char* const kStates[] = { |
303 "NC - North Carolina", "CA - California", | 311 "NC - North Carolina", "CA - California", |
304 }; | 312 }; |
305 AutofillField field( | 313 AutofillField field( |
306 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), | 314 GenerateSelectFieldWithOptions(kStates, arraysize(kStates)), |
307 base::string16()); | 315 base::string16()); |
308 field.set_heuristic_type(ADDRESS_HOME_STATE); | 316 field.set_heuristic_type(ADDRESS_HOME_STATE); |
309 | 317 |
310 AutofillField::FillFormField(field, ASCIIToUTF16("CA"), "en-US", | 318 AutofillField::FillFormField( |
311 &field); | 319 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
312 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); | 320 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); |
313 } | 321 } |
314 | 322 |
315 { | 323 { |
316 const char* const kNotStates[] = { | 324 const char* const kNotStates[] = { |
317 "NCNCA", "SCNCA", | 325 "NCNCA", "SCNCA", |
318 }; | 326 }; |
319 AutofillField field( | 327 AutofillField field( |
320 GenerateSelectFieldWithOptions(kNotStates, arraysize(kNotStates)), | 328 GenerateSelectFieldWithOptions(kNotStates, arraysize(kNotStates)), |
321 base::string16()); | 329 base::string16()); |
322 field.set_heuristic_type(ADDRESS_HOME_STATE); | 330 field.set_heuristic_type(ADDRESS_HOME_STATE); |
323 | 331 |
324 AutofillField::FillFormField(field, ASCIIToUTF16("NC"), "en-US", | 332 AutofillField::FillFormField( |
325 &field); | 333 field, ASCIIToUTF16("NC"), "en-US", "en-US", &field); |
326 EXPECT_EQ(base::string16(), field.value); | 334 EXPECT_EQ(base::string16(), field.value); |
327 } | 335 } |
328 } | 336 } |
329 | 337 |
330 TEST(AutofillFieldTest, FillSelectControlWithNumericMonth) { | 338 TEST(AutofillFieldTest, FillSelectControlWithNumericMonth) { |
331 const char* const kMonthsNumeric[] = { | 339 const char* const kMonthsNumeric[] = { |
332 "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", | 340 "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", |
333 }; | 341 }; |
334 AutofillField field( | 342 AutofillField field( |
335 GenerateSelectFieldWithOptions(kMonthsNumeric, arraysize(kMonthsNumeric)), | 343 GenerateSelectFieldWithOptions(kMonthsNumeric, arraysize(kMonthsNumeric)), |
336 base::string16()); | 344 base::string16()); |
337 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 345 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
338 | 346 |
339 // Try with a leading zero. | 347 // Try with a leading zero. |
340 AutofillField::FillFormField(field, ASCIIToUTF16("03"), "en-US", &field); | 348 AutofillField::FillFormField( |
| 349 field, ASCIIToUTF16("03"), "en-US", "en-US", &field); |
341 EXPECT_EQ(ASCIIToUTF16("03"), field.value); | 350 EXPECT_EQ(ASCIIToUTF16("03"), field.value); |
342 | 351 |
343 // Try without a leading zero. | 352 // Try without a leading zero. |
344 AutofillField::FillFormField(field, ASCIIToUTF16("4"), "en-US", &field); | 353 AutofillField::FillFormField( |
| 354 field, ASCIIToUTF16("4"), "en-US", "en-US", &field); |
345 EXPECT_EQ(ASCIIToUTF16("04"), field.value); | 355 EXPECT_EQ(ASCIIToUTF16("04"), field.value); |
346 | 356 |
347 // Try a two-digit month. | 357 // Try a two-digit month. |
348 AutofillField::FillFormField(field, ASCIIToUTF16("11"), "en-US", &field); | 358 AutofillField::FillFormField( |
| 359 field, ASCIIToUTF16("11"), "en-US", "en-US", &field); |
349 EXPECT_EQ(ASCIIToUTF16("11"), field.value); | 360 EXPECT_EQ(ASCIIToUTF16("11"), field.value); |
350 } | 361 } |
351 | 362 |
352 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { | 363 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { |
353 const char* const kMonthsAbbreviated[] = { | 364 const char* const kMonthsAbbreviated[] = { |
354 "Jan", "Feb", "Mar", "Apr", "May", "Jun", | 365 "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
355 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | 366 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", |
356 }; | 367 }; |
357 AutofillField field( | 368 AutofillField field( |
358 GenerateSelectFieldWithOptions( | 369 GenerateSelectFieldWithOptions( |
359 kMonthsAbbreviated, arraysize(kMonthsAbbreviated)), | 370 kMonthsAbbreviated, arraysize(kMonthsAbbreviated)), |
360 base::string16()); | 371 base::string16()); |
361 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 372 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
362 | 373 |
363 AutofillField::FillFormField(field, ASCIIToUTF16("04"), "en-US", &field); | 374 AutofillField::FillFormField( |
| 375 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
364 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); | 376 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); |
365 } | 377 } |
366 | 378 |
367 TEST(AutofillFieldTest, FillSelectControlWithFullMonthName) { | 379 TEST(AutofillFieldTest, FillSelectControlWithFullMonthName) { |
368 const char* const kMonthsFull[] = { | 380 const char* const kMonthsFull[] = { |
369 "January", "February", "March", "April", "May", "June", | 381 "January","February", "March", "April", "May", "June", |
370 "July", "August", "September", "October", "November", "December", | 382 "July", "August", "September", "October", "November", "December", |
371 }; | 383 }; |
372 AutofillField field( | 384 AutofillField field( |
373 GenerateSelectFieldWithOptions(kMonthsFull, arraysize(kMonthsFull)), | 385 GenerateSelectFieldWithOptions(kMonthsFull, arraysize(kMonthsFull)), |
374 base::string16()); | 386 base::string16()); |
375 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 387 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
376 | 388 |
377 AutofillField::FillFormField(field, ASCIIToUTF16("04"), "en-US", &field); | 389 AutofillField::FillFormField( |
| 390 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
378 EXPECT_EQ(ASCIIToUTF16("April"), field.value); | 391 EXPECT_EQ(ASCIIToUTF16("April"), field.value); |
379 } | 392 } |
380 | 393 |
381 TEST(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { | 394 TEST(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { |
382 const char* const kMonthsNumeric[] = { | 395 const char* const kMonthsNumeric[] = { |
383 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", | 396 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", |
384 }; | 397 }; |
385 AutofillField field( | 398 AutofillField field( |
386 GenerateSelectFieldWithOptions(kMonthsNumeric, arraysize(kMonthsNumeric)), | 399 GenerateSelectFieldWithOptions(kMonthsNumeric, arraysize(kMonthsNumeric)), |
387 base::string16()); | 400 base::string16()); |
388 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 401 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
389 | 402 |
390 AutofillField::FillFormField(field, ASCIIToUTF16("04"), "en-US", &field); | 403 AutofillField::FillFormField( |
| 404 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
391 EXPECT_EQ(ASCIIToUTF16("4"), field.value); | 405 EXPECT_EQ(ASCIIToUTF16("4"), field.value); |
392 } | 406 } |
393 | 407 |
394 TEST(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { | 408 TEST(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { |
395 const char* const kYears[] = { | 409 const char* const kYears[] = { |
396 "12", "13", "14", "15", "16", "17", "18", "19" | 410 "12", "13", "14", "15", "16", "17", "18", "19" |
397 }; | 411 }; |
398 AutofillField field(GenerateSelectFieldWithOptions(kYears, arraysize(kYears)), | 412 AutofillField field(GenerateSelectFieldWithOptions(kYears, arraysize(kYears)), |
399 base::string16()); | 413 base::string16()); |
400 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); | 414 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); |
401 | 415 |
402 AutofillField::FillFormField(field, ASCIIToUTF16("2017"), "en-US", &field); | 416 AutofillField::FillFormField( |
| 417 field, ASCIIToUTF16("2017"), "en-US", "en-US", &field); |
403 EXPECT_EQ(ASCIIToUTF16("17"), field.value); | 418 EXPECT_EQ(ASCIIToUTF16("17"), field.value); |
404 } | 419 } |
405 | 420 |
406 TEST(AutofillFieldTest, FillSelectControlWithCreditCardType) { | 421 TEST(AutofillFieldTest, FillSelectControlWithCreditCardType) { |
407 const char* const kCreditCardTypes[] = { | 422 const char* const kCreditCardTypes[] = { |
408 "Visa", "Master Card", "AmEx", "discover" | 423 "Visa", "Master Card", "AmEx", "discover" |
409 }; | 424 }; |
410 AutofillField field( | 425 AutofillField field( |
411 GenerateSelectFieldWithOptions( | 426 GenerateSelectFieldWithOptions( |
412 kCreditCardTypes, arraysize(kCreditCardTypes)), | 427 kCreditCardTypes, arraysize(kCreditCardTypes)), |
413 base::string16()); | 428 base::string16()); |
414 field.set_heuristic_type(CREDIT_CARD_TYPE); | 429 field.set_heuristic_type(CREDIT_CARD_TYPE); |
415 | 430 |
416 // Normal case: | 431 // Normal case: |
417 AutofillField::FillFormField(field, ASCIIToUTF16("Visa"), "en-US", &field); | 432 AutofillField::FillFormField( |
| 433 field, ASCIIToUTF16("Visa"), "en-US", "en-US", &field); |
418 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); | 434 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); |
419 | 435 |
420 // Filling should be able to handle intervening whitespace: | 436 // Filling should be able to handle intervening whitespace: |
421 AutofillField::FillFormField(field, ASCIIToUTF16("MasterCard"), "en-US", | 437 AutofillField::FillFormField( |
422 &field); | 438 field, ASCIIToUTF16("MasterCard"), "en-US", "en-US", &field); |
423 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); | 439 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); |
424 | 440 |
425 // American Express is sometimes abbreviated as AmEx: | 441 // American Express is sometimes abbreviated as AmEx: |
426 AutofillField::FillFormField(field, ASCIIToUTF16("American Express"), "en-US", | 442 AutofillField::FillFormField( |
427 &field); | 443 field, ASCIIToUTF16("American Express"), "en-US", "en-US", &field); |
428 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); | 444 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); |
429 | 445 |
430 // Case insensitivity: | 446 // Case insensitivity: |
431 AutofillField::FillFormField(field, ASCIIToUTF16("Discover"), "en-US", | 447 AutofillField::FillFormField( |
432 &field); | 448 field, ASCIIToUTF16("Discover"), "en-US", "en-US", &field); |
433 EXPECT_EQ(ASCIIToUTF16("discover"), field.value); | 449 EXPECT_EQ(ASCIIToUTF16("discover"), field.value); |
434 } | 450 } |
435 | 451 |
436 TEST(AutofillFieldTest, FillMonthControl) { | 452 TEST(AutofillFieldTest, FillMonthControl) { |
437 AutofillField field; | 453 AutofillField field; |
438 field.form_control_type = "month"; | 454 field.form_control_type = "month"; |
439 | 455 |
440 // Try a month with two digits. | 456 // Try a month with two digits. |
441 AutofillField::FillFormField(field, ASCIIToUTF16("12/2017"), "en-US", &field); | 457 AutofillField::FillFormField( |
| 458 field, ASCIIToUTF16("12/2017"), "en-US", "en-US", &field); |
442 EXPECT_EQ(ASCIIToUTF16("2017-12"), field.value); | 459 EXPECT_EQ(ASCIIToUTF16("2017-12"), field.value); |
443 | 460 |
444 // Try a month with a leading zero. | 461 // Try a month with a leading zero. |
445 AutofillField::FillFormField(field, ASCIIToUTF16("03/2019"), "en-US", &field); | 462 AutofillField::FillFormField( |
| 463 field, ASCIIToUTF16("03/2019"), "en-US", "en-US", &field); |
446 EXPECT_EQ(ASCIIToUTF16("2019-03"), field.value); | 464 EXPECT_EQ(ASCIIToUTF16("2019-03"), field.value); |
447 | 465 |
448 // Try a month without a leading zero. | 466 // Try a month without a leading zero. |
449 AutofillField::FillFormField(field, ASCIIToUTF16("4/2018"), "en-US", &field); | 467 AutofillField::FillFormField( |
| 468 field, ASCIIToUTF16("4/2018"), "en-US", "en-US", &field); |
450 EXPECT_EQ(ASCIIToUTF16("2018-04"), field.value); | 469 EXPECT_EQ(ASCIIToUTF16("2018-04"), field.value); |
451 } | 470 } |
452 | 471 |
453 TEST(AutofillFieldTest, FillStreetAddressTextArea) { | 472 TEST(AutofillFieldTest, FillStreetAddressTextArea) { |
454 AutofillField field; | 473 AutofillField field; |
455 field.form_control_type = "textarea"; | 474 field.form_control_type = "textarea"; |
456 | 475 |
457 base::string16 value = ASCIIToUTF16("123 Fake St.\n" | 476 base::string16 value = ASCIIToUTF16("123 Fake St.\n" |
458 "Apt. 42"); | 477 "Apt. 42"); |
459 AutofillField::FillFormField(field, value, "en-US", &field); | 478 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); |
460 EXPECT_EQ(value, field.value); | 479 EXPECT_EQ(value, field.value); |
| 480 |
| 481 base::string16 ja_value = UTF8ToUTF16("桜丘町26-1\n" |
| 482 "セルリアンタワー6階"); |
| 483 AutofillField::FillFormField(field, ja_value, "ja-JP", "en-US", &field); |
| 484 EXPECT_EQ(ja_value, field.value); |
461 } | 485 } |
462 | 486 |
463 TEST(AutofillFieldTest, FillStreetAddressTextField) { | 487 TEST(AutofillFieldTest, FillStreetAddressTextField) { |
464 AutofillField field; | 488 AutofillField field; |
465 field.form_control_type = "text"; | 489 field.form_control_type = "text"; |
466 field.set_server_type(ADDRESS_HOME_STREET_ADDRESS); | 490 field.set_server_type(ADDRESS_HOME_STREET_ADDRESS); |
467 | 491 |
468 base::string16 value = ASCIIToUTF16("123 Fake St.\n" | 492 base::string16 value = ASCIIToUTF16("123 Fake St.\n" |
469 "Apt. 42"); | 493 "Apt. 42"); |
470 AutofillField::FillFormField(field, value, "en-US", &field); | 494 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); |
471 EXPECT_EQ(ASCIIToUTF16("123 Fake St., Apt. 42"), field.value); | 495 EXPECT_EQ(ASCIIToUTF16("123 Fake St., Apt. 42"), field.value); |
| 496 |
| 497 AutofillField::FillFormField(field, |
| 498 UTF8ToUTF16("桜丘町26-1\n" |
| 499 "セルリアンタワー6階"), |
| 500 "ja-JP", |
| 501 "en-US", |
| 502 &field); |
| 503 EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value); |
472 } | 504 } |
473 | 505 |
474 } // namespace | 506 } // namespace |
475 } // namespace autofill | 507 } // namespace autofill |
OLD | NEW |