Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: components/autofill/core/browser/autofill_field_unittest.cc

Issue 1059173002: Make AutofillField::FindValueInSelectControl() handle non-ASCII values. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698