| 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 |