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