| 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 "base/format_macros.h" | 7 #include "base/strings/string_number_conversions.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/stringprintf.h" | |
| 10 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.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; | 15 using base::UTF8ToUTF16; |
| 17 | 16 |
| 18 namespace autofill { | 17 namespace autofill { |
| 19 namespace { | 18 namespace { |
| 20 | 19 |
| 21 // Returns a FormFieldData object corresponding to a <select> field populated | 20 // Returns a FormFieldData object corresponding to a <select> field populated |
| 22 // with the given |options|. | 21 // with the given |options|. |
| 23 FormFieldData GenerateSelectFieldWithOptions(const char* const* options, | 22 FormFieldData GenerateSelectFieldWithOptions(const char* const* options, |
| 24 size_t options_size) { | 23 size_t options_size) { |
| 25 std::vector<base::string16> options16(options_size); | 24 std::vector<base::string16> options16(options_size); |
| 26 for (size_t i = 0; i < options_size; ++i) { | 25 for (size_t i = 0; i < options_size; ++i) |
| 27 options16[i] = ASCIIToUTF16(options[i]); | 26 options16[i] = UTF8ToUTF16(options[i]); |
| 28 } | |
| 29 | 27 |
| 30 FormFieldData form_field; | 28 FormFieldData form_field; |
| 31 form_field.form_control_type = "select-one"; | 29 form_field.form_control_type = "select-one"; |
| 32 form_field.option_values = options16; | 30 form_field.option_values = options16; |
| 33 form_field.option_contents = options16; | 31 form_field.option_contents = options16; |
| 34 return form_field; | 32 return form_field; |
| 35 } | 33 } |
| 36 | 34 |
| 37 struct TestCase { | 35 struct TestCase { |
| 38 std::string card_number_; | 36 std::string card_number_; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 TEST(AutofillFieldTest, FillSelectControlByValue) { | 162 TEST(AutofillFieldTest, FillSelectControlByValue) { |
| 165 const char* const kOptions[] = { | 163 const char* const kOptions[] = { |
| 166 "Eenie", "Meenie", "Miney", "Mo", | 164 "Eenie", "Meenie", "Miney", "Mo", |
| 167 }; | 165 }; |
| 168 AutofillField field( | 166 AutofillField field( |
| 169 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), | 167 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), |
| 170 base::string16()); | 168 base::string16()); |
| 171 | 169 |
| 172 // Set semantically empty contents for each option, so that only the values | 170 // Set semantically empty contents for each option, so that only the values |
| 173 // can be used for matching. | 171 // can be used for matching. |
| 174 for (size_t i = 0; i < field.option_contents.size(); ++i) { | 172 for (size_t i = 0; i < field.option_contents.size(); ++i) |
| 175 field.option_contents[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); | 173 field.option_contents[i] = base::SizeTToString16(i); |
| 176 } | |
| 177 | 174 |
| 178 AutofillField::FillFormField( | 175 AutofillField::FillFormField( |
| 179 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); | 176 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); |
| 180 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); | 177 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); |
| 181 } | 178 } |
| 182 | 179 |
| 183 TEST(AutofillFieldTest, FillSelectControlByContents) { | 180 TEST(AutofillFieldTest, FillSelectControlByContents) { |
| 184 const char* const kOptions[] = { | 181 const char* const kOptions[] = { |
| 185 "Eenie", "Meenie", "Miney", "Mo", | 182 "Eenie", "Meenie", "Miney", "Mo", |
| 186 }; | 183 }; |
| 187 AutofillField field( | 184 AutofillField field( |
| 188 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), | 185 GenerateSelectFieldWithOptions(kOptions, arraysize(kOptions)), |
| 189 base::string16()); | 186 base::string16()); |
| 190 | 187 |
| 191 // Set semantically empty values for each option, so that only the contents | 188 // Set semantically empty values for each option, so that only the contents |
| 192 // can be used for matching. | 189 // can be used for matching. |
| 193 for (size_t i = 0; i < field.option_values.size(); ++i) { | 190 for (size_t i = 0; i < field.option_values.size(); ++i) |
| 194 field.option_values[i] = ASCIIToUTF16(base::StringPrintf("%" PRIuS, i)); | 191 field.option_values[i] = base::SizeTToString16(i); |
| 195 } | |
| 196 | 192 |
| 197 AutofillField::FillFormField( | 193 AutofillField::FillFormField( |
| 198 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); | 194 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); |
| 199 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". | 195 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". |
| 200 } | 196 } |
| 201 | 197 |
| 202 TEST(AutofillFieldTest, FillSelectControlWithFullCountryNames) { | 198 TEST(AutofillFieldTest, FillSelectControlWithFullCountryNames) { |
| 203 const char* const kCountries[] = { | 199 const char* const kCountries[] = { |
| 204 "Albania", "Canada" | 200 "Albania", "Canada" |
| 205 }; | 201 }; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 base::string16()); | 382 base::string16()); |
| 387 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 383 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 388 | 384 |
| 389 AutofillField::FillFormField( | 385 AutofillField::FillFormField( |
| 390 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 386 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 391 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); | 387 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); |
| 392 } | 388 } |
| 393 | 389 |
| 394 TEST(AutofillFieldTest, FillSelectControlWithFullMonthName) { | 390 TEST(AutofillFieldTest, FillSelectControlWithFullMonthName) { |
| 395 const char* const kMonthsFull[] = { | 391 const char* const kMonthsFull[] = { |
| 396 "January","February", "March", "April", "May", "June", | 392 "January", "February", "March", "April", "May", "June", |
| 397 "July", "August", "September", "October", "November", "December", | 393 "July", "August", "September", "October", "November", "December", |
| 398 }; | 394 }; |
| 399 AutofillField field( | 395 AutofillField field( |
| 400 GenerateSelectFieldWithOptions(kMonthsFull, arraysize(kMonthsFull)), | 396 GenerateSelectFieldWithOptions(kMonthsFull, arraysize(kMonthsFull)), |
| 401 base::string16()); | 397 base::string16()); |
| 402 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 398 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 403 | 399 |
| 404 AutofillField::FillFormField( | 400 AutofillField::FillFormField( |
| 405 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 401 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 406 EXPECT_EQ(ASCIIToUTF16("April"), field.value); | 402 EXPECT_EQ(ASCIIToUTF16("April"), field.value); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 AutofillField::FillFormField(cc_number_full, | 611 AutofillField::FillFormField(cc_number_full, |
| 616 ASCIIToUTF16(test.card_number_), | 612 ASCIIToUTF16(test.card_number_), |
| 617 "en-US", | 613 "en-US", |
| 618 "en-US", | 614 "en-US", |
| 619 &cc_number_full); | 615 &cc_number_full); |
| 620 | 616 |
| 621 // Verify for expected results. | 617 // Verify for expected results. |
| 622 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); | 618 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); |
| 623 } | 619 } |
| 624 | 620 |
| 621 TEST(AutofillFieldTest, FindValueInSelectControl) { |
| 622 const size_t kBadIndex = 1000; |
| 623 |
| 624 { |
| 625 const char* const kCountries[] = { |
| 626 "Albania", "Canada" |
| 627 }; |
| 628 FormFieldData field( |
| 629 GenerateSelectFieldWithOptions(kCountries, arraysize(kCountries))); |
| 630 size_t index = kBadIndex; |
| 631 bool ret = AutofillField::FindValueInSelectControl( |
| 632 field, ASCIIToUTF16("Canada"), &index); |
| 633 EXPECT_TRUE(ret); |
| 634 EXPECT_EQ(1U, index); |
| 635 |
| 636 index = kBadIndex; |
| 637 ret = AutofillField::FindValueInSelectControl( |
| 638 field, ASCIIToUTF16("CANADA"), &index); |
| 639 EXPECT_TRUE(ret); |
| 640 EXPECT_EQ(1U, index); |
| 641 |
| 642 index = kBadIndex; |
| 643 ret = AutofillField::FindValueInSelectControl( |
| 644 field, ASCIIToUTF16("Canadia"), &index); |
| 645 EXPECT_FALSE(ret); |
| 646 EXPECT_EQ(kBadIndex, index); |
| 647 } |
| 648 |
| 649 { |
| 650 const char* const kProvinces[] = { |
| 651 "ALBERTA", "QUÉBEC", "NOVA SCOTIA", |
| 652 }; |
| 653 FormFieldData field( |
| 654 GenerateSelectFieldWithOptions(kProvinces, arraysize(kProvinces))); |
| 655 size_t index = kBadIndex; |
| 656 bool ret = AutofillField::FindValueInSelectControl( |
| 657 field, ASCIIToUTF16("alberta"), &index); |
| 658 EXPECT_TRUE(ret); |
| 659 EXPECT_EQ(0U, index); |
| 660 |
| 661 index = kBadIndex; |
| 662 ret = AutofillField::FindValueInSelectControl( |
| 663 field, UTF8ToUTF16("québec"), &index); |
| 664 EXPECT_TRUE(ret); |
| 665 EXPECT_EQ(1U, index); |
| 666 |
| 667 index = kBadIndex; |
| 668 ret = AutofillField::FindValueInSelectControl( |
| 669 field, UTF8ToUTF16("NoVaScOtIa"), &index); |
| 670 EXPECT_TRUE(ret); |
| 671 EXPECT_EQ(2U, index); |
| 672 } |
| 673 } |
| 674 |
| 625 } // namespace | 675 } // namespace |
| 626 } // namespace autofill | 676 } // namespace autofill |
| OLD | NEW |