| 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" | 5 #include "components/autofill/core/browser/autofill_field.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 13 #include "components/autofill/core/browser/autofill_type.h" | 14 #include "components/autofill/core/browser/autofill_type.h" |
| 14 #include "components/autofill/core/browser/country_names.h" | 15 #include "components/autofill/core/browser/country_names.h" |
| 15 #include "components/autofill/core/browser/field_types.h" | 16 #include "components/autofill/core/browser/field_types.h" |
| 16 #include "components/autofill/core/common/autofill_util.h" | 17 #include "components/autofill/core/common/autofill_util.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 using base::ASCIIToUTF16; | 20 using base::ASCIIToUTF16; |
| 20 using base::StringToInt; | 21 using base::StringToInt; |
| 21 using base::UTF8ToUTF16; | 22 using base::UTF8ToUTF16; |
| 22 | 23 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 43 "Jun", | 44 "Jun", |
| 44 "Jul", | 45 "Jul", |
| 45 "Aug", | 46 "Aug", |
| 46 "Sep", | 47 "Sep", |
| 47 "Oct", | 48 "Oct", |
| 48 "Nov", | 49 "Nov", |
| 49 "Dec"}; | 50 "Dec"}; |
| 50 return result; | 51 return result; |
| 51 } | 52 } |
| 52 | 53 |
| 53 // Returns a FormFieldData object corresponding to a <select> field populated | |
| 54 // with the given |values| and |contents|. | |
| 55 FormFieldData GenerateSelectFieldWithOptions( | |
| 56 const std::vector<const char*>& values, | |
| 57 const std::vector<const char*>& contents, | |
| 58 size_t select_size) { | |
| 59 std::vector<base::string16> values16(select_size); | |
| 60 for (size_t i = 0; i < select_size; ++i) | |
| 61 values16[i] = UTF8ToUTF16(values[i]); | |
| 62 | |
| 63 std::vector<base::string16> contents16(select_size); | |
| 64 for (size_t i = 0; i < select_size; ++i) | |
| 65 contents16[i] = UTF8ToUTF16(contents[i]); | |
| 66 | |
| 67 FormFieldData form_field; | |
| 68 form_field.form_control_type = "select-one"; | |
| 69 form_field.option_values = values16; | |
| 70 form_field.option_contents = contents16; | |
| 71 return form_field; | |
| 72 } | |
| 73 | |
| 74 // Returns a FormFieldData object corresponding to a <select> field populated | |
| 75 // with the given |values|. | |
| 76 FormFieldData GenerateSelectFieldWithOptions( | |
| 77 const std::vector<const char*>& values, | |
| 78 size_t select_size) { | |
| 79 return GenerateSelectFieldWithOptions(values, values, select_size); | |
| 80 } | |
| 81 | |
| 82 // Returns the index of |value| in |values|. | 54 // Returns the index of |value| in |values|. |
| 83 void GetIndexOfValue(const std::vector<base::string16>& values, | 55 void GetIndexOfValue(const std::vector<base::string16>& values, |
| 84 const base::string16& value, | 56 const base::string16& value, |
| 85 size_t* index) { | 57 size_t* index) { |
| 86 for (size_t i = 0; i < values.size(); ++i) { | 58 for (size_t i = 0; i < values.size(); ++i) { |
| 87 if (values[i] == value) { | 59 if (values[i] == value) { |
| 88 *index = i; | 60 *index = i; |
| 89 return; | 61 return; |
| 90 } | 62 } |
| 91 } | 63 } |
| 92 ASSERT_TRUE(false) << "Passing invalid arguments to GetIndexOfValue"; | 64 ASSERT_TRUE(false) << "Passing invalid arguments to GetIndexOfValue"; |
| 93 } | 65 } |
| 94 | 66 |
| 95 // Creates the select field from the specified |values| and |contents| and tests | 67 // Creates the select field from the specified |values| and |contents| and tests |
| 96 // filling with 3 different values. | 68 // filling with 3 different values. |
| 97 void TestFillingExpirationMonth(const std::vector<const char*>& values, | 69 void TestFillingExpirationMonth(const std::vector<const char*>& values, |
| 98 const std::vector<const char*>& contents, | 70 const std::vector<const char*>& contents, |
| 99 size_t select_size) { | 71 size_t select_size) { |
| 100 // Create the select field. | 72 // Create the select field. |
| 101 AutofillField field( | 73 AutofillField field; |
| 102 GenerateSelectFieldWithOptions(values, contents, select_size), | 74 test::CreateTestSelectField("", "", "", values, contents, select_size, |
| 103 base::string16()); | 75 &field); |
| 104 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 76 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 105 | 77 |
| 106 size_t content_index = 0; | 78 size_t content_index = 0; |
| 107 | 79 |
| 108 // Try with a leading zero. | 80 // Try with a leading zero. |
| 109 AutofillField::FillFormField(field, ASCIIToUTF16("03"), "en-US", "en-US", | 81 AutofillField::FillFormField(field, ASCIIToUTF16("03"), "en-US", "en-US", |
| 110 &field); | 82 &field); |
| 111 GetIndexOfValue(field.option_values, field.value, &content_index); | 83 GetIndexOfValue(field.option_values, field.value, &content_index); |
| 112 EXPECT_EQ(ASCIIToUTF16("Mar"), field.option_contents[content_index]); | 84 EXPECT_EQ(ASCIIToUTF16("Mar"), field.option_contents[content_index]); |
| 113 | 85 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), | 327 AutofillField::FillFormField(field, ASCIIToUTF16(test_case.value_to_fill), |
| 356 "en-US", "en-US", &field); | 328 "en-US", "en-US", &field); |
| 357 EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); | 329 EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); |
| 358 } | 330 } |
| 359 } | 331 } |
| 360 | 332 |
| 361 TEST_F(AutofillFieldTest, FillSelectControlByValue) { | 333 TEST_F(AutofillFieldTest, FillSelectControlByValue) { |
| 362 std::vector<const char*> kOptions = { | 334 std::vector<const char*> kOptions = { |
| 363 "Eenie", "Meenie", "Miney", "Mo", | 335 "Eenie", "Meenie", "Miney", "Mo", |
| 364 }; | 336 }; |
| 365 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), | 337 |
| 366 base::string16()); | 338 AutofillField field; |
| 339 test::CreateTestSelectField(kOptions, &field); |
| 367 | 340 |
| 368 // Set semantically empty contents for each option, so that only the values | 341 // Set semantically empty contents for each option, so that only the values |
| 369 // can be used for matching. | 342 // can be used for matching. |
| 370 for (size_t i = 0; i < field.option_contents.size(); ++i) | 343 for (size_t i = 0; i < field.option_contents.size(); ++i) |
| 371 field.option_contents[i] = base::SizeTToString16(i); | 344 field.option_contents[i] = base::SizeTToString16(i); |
| 372 | 345 |
| 373 AutofillField::FillFormField( | 346 AutofillField::FillFormField( |
| 374 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); | 347 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); |
| 375 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); | 348 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); |
| 376 } | 349 } |
| 377 | 350 |
| 378 TEST_F(AutofillFieldTest, FillSelectControlByContents) { | 351 TEST_F(AutofillFieldTest, FillSelectControlByContents) { |
| 379 std::vector<const char*> kOptions = { | 352 std::vector<const char*> kOptions = { |
| 380 "Eenie", "Meenie", "Miney", "Mo", | 353 "Eenie", "Meenie", "Miney", "Mo", |
| 381 }; | 354 }; |
| 382 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), | 355 AutofillField field; |
| 383 base::string16()); | 356 test::CreateTestSelectField(kOptions, &field); |
| 384 | 357 |
| 385 // Set semantically empty values for each option, so that only the contents | 358 // Set semantically empty values for each option, so that only the contents |
| 386 // can be used for matching. | 359 // can be used for matching. |
| 387 for (size_t i = 0; i < field.option_values.size(); ++i) | 360 for (size_t i = 0; i < field.option_values.size(); ++i) |
| 388 field.option_values[i] = base::SizeTToString16(i); | 361 field.option_values[i] = base::SizeTToString16(i); |
| 389 | 362 |
| 390 AutofillField::FillFormField( | 363 AutofillField::FillFormField( |
| 391 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); | 364 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); |
| 392 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". | 365 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". |
| 393 } | 366 } |
| 394 | 367 |
| 395 TEST_F(AutofillFieldTest, FillSelectControlWithFullCountryNames) { | 368 TEST_F(AutofillFieldTest, FillSelectControlWithFullCountryNames) { |
| 396 std::vector<const char*> kCountries = {"Albania", "Canada"}; | 369 std::vector<const char*> kCountries = {"Albania", "Canada"}; |
| 397 AutofillField field( | 370 AutofillField field; |
| 398 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), | 371 test::CreateTestSelectField(kCountries, &field); |
| 399 base::string16()); | |
| 400 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 372 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
| 401 | 373 |
| 402 AutofillField::FillFormField( | 374 AutofillField::FillFormField( |
| 403 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 375 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 404 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); | 376 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); |
| 405 } | 377 } |
| 406 | 378 |
| 407 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { | 379 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { |
| 408 std::vector<const char*> kCountries = {"AL", "CA"}; | 380 std::vector<const char*> kCountries = {"AL", "CA"}; |
| 409 AutofillField field( | 381 AutofillField field; |
| 410 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), | 382 test::CreateTestSelectField(kCountries, &field); |
| 411 base::string16()); | |
| 412 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 383 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
| 413 | 384 |
| 414 AutofillField::FillFormField( | 385 AutofillField::FillFormField( |
| 415 field, ASCIIToUTF16("Canada"), "en-US", "en-US", &field); | 386 field, ASCIIToUTF16("Canada"), "en-US", "en-US", &field); |
| 416 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 387 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
| 417 } | 388 } |
| 418 | 389 |
| 419 TEST_F(AutofillFieldTest, FillSelectControlWithFullStateNames) { | 390 TEST_F(AutofillFieldTest, FillSelectControlWithFullStateNames) { |
| 420 std::vector<const char*> kStates = {"Alabama", "California"}; | 391 std::vector<const char*> kStates = {"Alabama", "California"}; |
| 421 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 392 AutofillField field; |
| 422 base::string16()); | 393 test::CreateTestSelectField(kStates, &field); |
| 423 field.set_heuristic_type(ADDRESS_HOME_STATE); | 394 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 424 | 395 |
| 425 AutofillField::FillFormField( | 396 AutofillField::FillFormField( |
| 426 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 397 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 427 EXPECT_EQ(ASCIIToUTF16("California"), field.value); | 398 EXPECT_EQ(ASCIIToUTF16("California"), field.value); |
| 428 } | 399 } |
| 429 | 400 |
| 430 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { | 401 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { |
| 431 std::vector<const char*> kStates = {"AL", "CA"}; | 402 std::vector<const char*> kStates = {"AL", "CA"}; |
| 432 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 403 AutofillField field; |
| 433 base::string16()); | 404 test::CreateTestSelectField(kStates, &field); |
| 434 field.set_heuristic_type(ADDRESS_HOME_STATE); | 405 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 435 | 406 |
| 436 AutofillField::FillFormField( | 407 AutofillField::FillFormField( |
| 437 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); | 408 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
| 438 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 409 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
| 439 } | 410 } |
| 440 | 411 |
| 441 TEST_F(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { | 412 TEST_F(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { |
| 442 { | 413 { |
| 443 std::vector<const char*> kStates = { | 414 std::vector<const char*> kStates = { |
| 444 "SC - South Carolina", "CA - California", "NC - North Carolina", | 415 "SC - South Carolina", "CA - California", "NC - North Carolina", |
| 445 }; | 416 }; |
| 446 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 417 AutofillField field; |
| 447 base::string16()); | 418 test::CreateTestSelectField(kStates, &field); |
| 448 field.set_heuristic_type(ADDRESS_HOME_STATE); | 419 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 449 | 420 |
| 450 AutofillField::FillFormField( | 421 AutofillField::FillFormField( |
| 451 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); | 422 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
| 452 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); | 423 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); |
| 453 } | 424 } |
| 454 | 425 |
| 455 // Don't accidentally match "Virginia" to "West Virginia". | 426 // Don't accidentally match "Virginia" to "West Virginia". |
| 456 { | 427 { |
| 457 std::vector<const char*> kStates = { | 428 std::vector<const char*> kStates = { |
| 458 "WV - West Virginia", "VA - Virginia", "NV - North Virginia", | 429 "WV - West Virginia", "VA - Virginia", "NV - North Virginia", |
| 459 }; | 430 }; |
| 460 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 431 AutofillField field; |
| 461 base::string16()); | 432 test::CreateTestSelectField(kStates, &field); |
| 462 field.set_heuristic_type(ADDRESS_HOME_STATE); | 433 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 463 | 434 |
| 464 AutofillField::FillFormField( | 435 AutofillField::FillFormField( |
| 465 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); | 436 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); |
| 466 EXPECT_EQ(ASCIIToUTF16("VA - Virginia"), field.value); | 437 EXPECT_EQ(ASCIIToUTF16("VA - Virginia"), field.value); |
| 467 } | 438 } |
| 468 | 439 |
| 469 // Do accidentally match "Virginia" to "West Virginia". NB: Ideally, Chrome | 440 // Do accidentally match "Virginia" to "West Virginia". NB: Ideally, Chrome |
| 470 // would fail this test. It's here to document behavior rather than enforce | 441 // would fail this test. It's here to document behavior rather than enforce |
| 471 // it. | 442 // it. |
| 472 { | 443 { |
| 473 std::vector<const char*> kStates = { | 444 std::vector<const char*> kStates = { |
| 474 "WV - West Virginia", "TX - Texas", | 445 "WV - West Virginia", "TX - Texas", |
| 475 }; | 446 }; |
| 476 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 447 AutofillField field; |
| 477 base::string16()); | 448 test::CreateTestSelectField(kStates, &field); |
| 478 field.set_heuristic_type(ADDRESS_HOME_STATE); | 449 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 479 | 450 |
| 480 AutofillField::FillFormField( | 451 AutofillField::FillFormField( |
| 481 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); | 452 field, ASCIIToUTF16("Virginia"), "en-US", "en-US", &field); |
| 482 EXPECT_EQ(ASCIIToUTF16("WV - West Virginia"), field.value); | 453 EXPECT_EQ(ASCIIToUTF16("WV - West Virginia"), field.value); |
| 483 } | 454 } |
| 484 | 455 |
| 485 // Tests that substring matches work for full state names (a full token | 456 // Tests that substring matches work for full state names (a full token |
| 486 // match isn't required). Also tests that matches work for states with | 457 // match isn't required). Also tests that matches work for states with |
| 487 // whitespace in the middle. | 458 // whitespace in the middle. |
| 488 { | 459 { |
| 489 std::vector<const char*> kStates = { | 460 std::vector<const char*> kStates = { |
| 490 "California.", "North Carolina.", | 461 "California.", "North Carolina.", |
| 491 }; | 462 }; |
| 492 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 463 AutofillField field; |
| 493 base::string16()); | 464 test::CreateTestSelectField(kStates, &field); |
| 494 field.set_heuristic_type(ADDRESS_HOME_STATE); | 465 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 495 | 466 |
| 496 AutofillField::FillFormField( | 467 AutofillField::FillFormField( |
| 497 field, ASCIIToUTF16("North Carolina"), "en-US", "en-US", &field); | 468 field, ASCIIToUTF16("North Carolina"), "en-US", "en-US", &field); |
| 498 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); | 469 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); |
| 499 } | 470 } |
| 500 } | 471 } |
| 501 | 472 |
| 502 TEST_F(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { | 473 TEST_F(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { |
| 503 { | 474 { |
| 504 std::vector<const char*> kStates = { | 475 std::vector<const char*> kStates = { |
| 505 "NC - North Carolina", "CA - California", | 476 "NC - North Carolina", "CA - California", |
| 506 }; | 477 }; |
| 507 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 478 AutofillField field; |
| 508 base::string16()); | 479 test::CreateTestSelectField(kStates, &field); |
| 509 field.set_heuristic_type(ADDRESS_HOME_STATE); | 480 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 510 | 481 |
| 511 AutofillField::FillFormField( | 482 AutofillField::FillFormField( |
| 512 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 483 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 513 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); | 484 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); |
| 514 } | 485 } |
| 515 | 486 |
| 516 { | 487 { |
| 517 std::vector<const char*> kNotStates = { | 488 std::vector<const char*> kNotStates = { |
| 518 "NCNCA", "SCNCA", | 489 "NCNCA", "SCNCA", |
| 519 }; | 490 }; |
| 520 AutofillField field( | 491 AutofillField field; |
| 521 GenerateSelectFieldWithOptions(kNotStates, kNotStates.size()), | 492 test::CreateTestSelectField(kNotStates, &field); |
| 522 base::string16()); | |
| 523 field.set_heuristic_type(ADDRESS_HOME_STATE); | 493 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 524 | 494 |
| 525 AutofillField::FillFormField( | 495 AutofillField::FillFormField( |
| 526 field, ASCIIToUTF16("NC"), "en-US", "en-US", &field); | 496 field, ASCIIToUTF16("NC"), "en-US", "en-US", &field); |
| 527 EXPECT_EQ(base::string16(), field.value); | 497 EXPECT_EQ(base::string16(), field.value); |
| 528 } | 498 } |
| 529 } | 499 } |
| 530 | 500 |
| 531 TEST_F(AutofillFieldTest, FillSelectControlWithExpirationMonth) { | 501 TEST_F(AutofillFieldTest, FillSelectControlWithExpirationMonth) { |
| 532 typedef struct { | 502 typedef struct { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 test_case.select_contents, | 547 test_case.select_contents, |
| 578 test_case.select_values.size()); | 548 test_case.select_values.size()); |
| 579 } | 549 } |
| 580 } | 550 } |
| 581 | 551 |
| 582 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { | 552 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { |
| 583 std::vector<const char*> kMonthsAbbreviated = { | 553 std::vector<const char*> kMonthsAbbreviated = { |
| 584 "Jan", "Feb", "Mar", "Apr", "May", "Jun", | 554 "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
| 585 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | 555 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", |
| 586 }; | 556 }; |
| 587 AutofillField field(GenerateSelectFieldWithOptions(kMonthsAbbreviated, | 557 AutofillField field; |
| 588 kMonthsAbbreviated.size()), | 558 test::CreateTestSelectField(kMonthsAbbreviated, &field); |
| 589 base::string16()); | |
| 590 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 559 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 591 | 560 |
| 592 AutofillField::FillFormField( | 561 AutofillField::FillFormField( |
| 593 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 562 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 594 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); | 563 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); |
| 595 } | 564 } |
| 596 | 565 |
| 597 TEST_F(AutofillFieldTest, FillSelectControlWithFullMonthName) { | 566 TEST_F(AutofillFieldTest, FillSelectControlWithFullMonthName) { |
| 598 std::vector<const char*> kMonthsFull = { | 567 std::vector<const char*> kMonthsFull = { |
| 599 "January", "February", "March", "April", "May", "June", | 568 "January", "February", "March", "April", "May", "June", |
| 600 "July", "August", "September", "October", "November", "December", | 569 "July", "August", "September", "October", "November", "December", |
| 601 }; | 570 }; |
| 602 AutofillField field( | 571 AutofillField field; |
| 603 GenerateSelectFieldWithOptions(kMonthsFull, kMonthsFull.size()), | 572 test::CreateTestSelectField(kMonthsFull, &field); |
| 604 base::string16()); | |
| 605 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 573 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 606 | 574 |
| 607 AutofillField::FillFormField( | 575 AutofillField::FillFormField( |
| 608 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 576 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 609 EXPECT_EQ(ASCIIToUTF16("April"), field.value); | 577 EXPECT_EQ(ASCIIToUTF16("April"), field.value); |
| 610 } | 578 } |
| 611 | 579 |
| 612 TEST_F(AutofillFieldTest, FillSelectControlWithFrenchMonthName) { | 580 TEST_F(AutofillFieldTest, FillSelectControlWithFrenchMonthName) { |
| 613 std::vector<const char*> kMonthsFrench = {"JANV", "FÉVR.", "MARS", | 581 std::vector<const char*> kMonthsFrench = {"JANV", "FÉVR.", "MARS", |
| 614 "décembre"}; | 582 "décembre"}; |
| 615 AutofillField field( | 583 AutofillField field; |
| 616 GenerateSelectFieldWithOptions(kMonthsFrench, kMonthsFrench.size()), | 584 test::CreateTestSelectField(kMonthsFrench, &field); |
| 617 base::string16()); | |
| 618 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 585 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 619 | 586 |
| 620 AutofillField::FillFormField( | 587 AutofillField::FillFormField( |
| 621 field, ASCIIToUTF16("02"), "fr-FR", "fr-FR", &field); | 588 field, ASCIIToUTF16("02"), "fr-FR", "fr-FR", &field); |
| 622 EXPECT_EQ(UTF8ToUTF16("FÉVR."), field.value); | 589 EXPECT_EQ(UTF8ToUTF16("FÉVR."), field.value); |
| 623 | 590 |
| 624 AutofillField::FillFormField( | 591 AutofillField::FillFormField( |
| 625 field, ASCIIToUTF16("01"), "fr-FR", "fr-FR", &field); | 592 field, ASCIIToUTF16("01"), "fr-FR", "fr-FR", &field); |
| 626 EXPECT_EQ(UTF8ToUTF16("JANV"), field.value); | 593 EXPECT_EQ(UTF8ToUTF16("JANV"), field.value); |
| 627 | 594 |
| 628 AutofillField::FillFormField( | 595 AutofillField::FillFormField( |
| 629 field, ASCIIToUTF16("12"), "fr-FR", "fr-FR", &field); | 596 field, ASCIIToUTF16("12"), "fr-FR", "fr-FR", &field); |
| 630 EXPECT_EQ(UTF8ToUTF16("décembre"), field.value); | 597 EXPECT_EQ(UTF8ToUTF16("décembre"), field.value); |
| 631 } | 598 } |
| 632 | 599 |
| 633 TEST_F(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { | 600 TEST_F(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { |
| 634 std::vector<const char*> kMonthsNumeric = { | 601 std::vector<const char*> kMonthsNumeric = { |
| 635 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", | 602 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", |
| 636 }; | 603 }; |
| 637 AutofillField field( | 604 AutofillField field; |
| 638 GenerateSelectFieldWithOptions(kMonthsNumeric, kMonthsNumeric.size()), | 605 test::CreateTestSelectField(kMonthsNumeric, &field); |
| 639 base::string16()); | |
| 640 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 606 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 641 | 607 |
| 642 AutofillField::FillFormField( | 608 AutofillField::FillFormField( |
| 643 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 609 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 644 EXPECT_EQ(ASCIIToUTF16("4"), field.value); | 610 EXPECT_EQ(ASCIIToUTF16("4"), field.value); |
| 645 } | 611 } |
| 646 | 612 |
| 647 TEST_F(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { | 613 TEST_F(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { |
| 648 std::vector<const char*> kYears = {"12", "13", "14", "15", | 614 std::vector<const char*> kYears = {"12", "13", "14", "15", |
| 649 "16", "17", "18", "19"}; | 615 "16", "17", "18", "19"}; |
| 650 AutofillField field(GenerateSelectFieldWithOptions(kYears, kYears.size()), | 616 AutofillField field; |
| 651 base::string16()); | 617 test::CreateTestSelectField(kYears, &field); |
| 652 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); | 618 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); |
| 653 | 619 |
| 654 AutofillField::FillFormField( | 620 AutofillField::FillFormField( |
| 655 field, ASCIIToUTF16("2017"), "en-US", "en-US", &field); | 621 field, ASCIIToUTF16("2017"), "en-US", "en-US", &field); |
| 656 EXPECT_EQ(ASCIIToUTF16("17"), field.value); | 622 EXPECT_EQ(ASCIIToUTF16("17"), field.value); |
| 657 } | 623 } |
| 658 | 624 |
| 659 TEST_F(AutofillFieldTest, FillSelectControlWithCreditCardType) { | 625 TEST_F(AutofillFieldTest, FillSelectControlWithCreditCardType) { |
| 660 std::vector<const char*> kCreditCardTypes = {"Visa", "Master Card", "AmEx", | 626 std::vector<const char*> kCreditCardTypes = {"Visa", "Master Card", "AmEx", |
| 661 "discover"}; | 627 "discover"}; |
| 662 AutofillField field( | 628 AutofillField field; |
| 663 GenerateSelectFieldWithOptions(kCreditCardTypes, kCreditCardTypes.size()), | 629 test::CreateTestSelectField(kCreditCardTypes, &field); |
| 664 base::string16()); | |
| 665 field.set_heuristic_type(CREDIT_CARD_TYPE); | 630 field.set_heuristic_type(CREDIT_CARD_TYPE); |
| 666 | 631 |
| 667 // Normal case: | 632 // Normal case: |
| 668 AutofillField::FillFormField( | 633 AutofillField::FillFormField( |
| 669 field, ASCIIToUTF16("Visa"), "en-US", "en-US", &field); | 634 field, ASCIIToUTF16("Visa"), "en-US", "en-US", &field); |
| 670 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); | 635 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); |
| 671 | 636 |
| 672 // Filling should be able to handle intervening whitespace: | 637 // Filling should be able to handle intervening whitespace: |
| 673 AutofillField::FillFormField( | 638 AutofillField::FillFormField( |
| 674 field, ASCIIToUTF16("MasterCard"), "en-US", "en-US", &field); | 639 field, ASCIIToUTF16("MasterCard"), "en-US", "en-US", &field); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 "en-US", | 803 "en-US", |
| 839 "en-US", | 804 "en-US", |
| 840 &cc_number_full); | 805 &cc_number_full); |
| 841 | 806 |
| 842 // Verify for expected results. | 807 // Verify for expected results. |
| 843 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); | 808 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); |
| 844 } | 809 } |
| 845 | 810 |
| 846 TEST_F(AutofillFieldTest, FindShortestSubstringMatchInSelect) { | 811 TEST_F(AutofillFieldTest, FindShortestSubstringMatchInSelect) { |
| 847 std::vector<const char*> kCountries = {"États-Unis", "Canada"}; | 812 std::vector<const char*> kCountries = {"États-Unis", "Canada"}; |
| 848 FormFieldData field( | 813 AutofillField field; |
| 849 GenerateSelectFieldWithOptions(kCountries, kCountries.size())); | 814 test::CreateTestSelectField(kCountries, &field); |
| 850 | 815 |
| 851 // Case 1: Exact match | 816 // Case 1: Exact match |
| 852 int ret = AutofillField::FindShortestSubstringMatchInSelect( | 817 int ret = AutofillField::FindShortestSubstringMatchInSelect( |
| 853 ASCIIToUTF16("Canada"), false, &field); | 818 ASCIIToUTF16("Canada"), false, &field); |
| 854 EXPECT_EQ(1, ret); | 819 EXPECT_EQ(1, ret); |
| 855 | 820 |
| 856 // Case 2: Case-insensitive | 821 // Case 2: Case-insensitive |
| 857 ret = AutofillField::FindShortestSubstringMatchInSelect( | 822 ret = AutofillField::FindShortestSubstringMatchInSelect( |
| 858 ASCIIToUTF16("CANADA"), false, &field); | 823 ASCIIToUTF16("CANADA"), false, &field); |
| 859 EXPECT_EQ(1, ret); | 824 EXPECT_EQ(1, ret); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 926 bool has_filled = AutofillField::FillFormField( | 891 bool has_filled = AutofillField::FillFormField( |
| 927 field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); | 892 field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); |
| 928 | 893 |
| 929 EXPECT_EQ(test_case.should_fill, has_filled); | 894 EXPECT_EQ(test_case.should_fill, has_filled); |
| 930 EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); | 895 EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); |
| 931 } | 896 } |
| 932 } | 897 } |
| 933 | 898 |
| 934 } // namespace | 899 } // namespace |
| 935 } // namespace autofill | 900 } // namespace autofill |
| OLD | NEW |