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 |