Chromium Code Reviews| Index: components/autofill/core/browser/autofill_manager_unittest.cc |
| diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc |
| index c556bf92cee944cecff7142fa7799a5ebb7a733b..aea2beea964c916daab41ca7225877e0934dc917 100644 |
| --- a/components/autofill/core/browser/autofill_manager_unittest.cc |
| +++ b/components/autofill/core/browser/autofill_manager_unittest.cc |
| @@ -213,6 +213,31 @@ void CreateTestCreditCardFormData(FormData* form, |
| } |
| } |
| +// Helper function to create a form with credit card number spits across 4 input |
| +// fields. |
| +void CreateTestCreditCardFormWithNumberSplitAcrossFields(FormData* form) { |
| + CreateTestCreditCardFormData(form, true, false); |
| + |
| + // Remove existing card number field. |
| + form->fields.erase(form->fields.begin() + 1); |
| + |
| + // Add new 4 |card_number_field|s to the |form|. |
| + FormFieldData card_number_field; |
| + card_number_field.max_length = 4; |
| + test::CreateTestFormField( |
| + "Card Number", "cardnumber_1", "", "text", &card_number_field); |
| + form->fields.insert(form->fields.begin() + 1, card_number_field); |
| + |
| + test::CreateTestFormField("", "cardnumber_2", "", "text", &card_number_field); |
| + form->fields.insert(form->fields.begin() + 2, card_number_field); |
| + |
| + test::CreateTestFormField("", "cardnumber_3", "", "text", &card_number_field); |
| + form->fields.insert(form->fields.begin() + 3, card_number_field); |
| + |
| + test::CreateTestFormField("", "cardnumber_4", "", "text", &card_number_field); |
| + form->fields.insert(form->fields.begin() + 4, card_number_field); |
| +} |
| + |
| void ExpectFilledField(const char* expected_label, |
| const char* expected_name, |
| const char* expected_value, |
| @@ -898,7 +923,7 @@ TEST_F(AutofillManagerTest, GetCreditCardSuggestionsMatchCharacter) { |
| FormsSeen(forms); |
| FormFieldData field; |
| - test::CreateTestFormField("Card Number", "cardnumber", "4", "text", &field); |
| + test::CreateTestFormField("Card Number", "cardnumber", "78", "text", &field); |
| GetAutofillSuggestions(form, field); |
| // No suggestions provided, so send an empty vector as the results. |
| @@ -2988,4 +3013,61 @@ TEST_F(AutofillManagerTest, TestExternalDelegate) { |
| EXPECT_TRUE(external_delegate_->on_query_seen()); |
| } |
| +// Test to verify suggestions appears for forms having credit card number split |
| +// across fields. |
| +TEST_F(AutofillManagerTest, GetCreditCardSuggestionsForNumberSpitAcrossFields) { |
| + // Set up our form data with credit card number split across fields. |
| + FormData form; |
| + CreateTestCreditCardFormWithNumberSplitAcrossFields(&form); |
| + std::vector<FormData> forms(1, form); |
| + FormsSeen(forms); |
| + |
| + // Fill the credit card details. |
| + GUIDPair guid("00000000-0000-0000-0000-000000000004", 0); |
| + GUIDPair empty(std::string(), 0); |
| + int response_page_id = 0; |
| + FormData response_data; |
| + FillAutofillFormDataAndSaveResults(kDefaultPageID, |
| + form, |
| + *form.fields.begin(), |
| + PackGUIDs(guid, empty), |
| + &response_page_id, |
| + &response_data); |
| + |
| + ASSERT_EQ(7U, response_data.fields.size()); |
| + |
| + // Verify whether suggestions for credit card number spilt across 4 fields |
| + // getting populated correctly. |
|
Ilya Sherman
2014/10/28 21:48:40
nit: "getting" -> "are"
Pritam Nikam
2014/10/29 08:38:16
Done.
|
| + const size_t starts_at = 1; |
| + const size_t total_number_fields = 4; |
| + for (size_t i = starts_at; i < (starts_at + total_number_fields); ++i) { |
|
Ilya Sherman
2014/10/28 21:48:40
Please unroll this loop, so have four repeated set
Pritam Nikam
2014/10/29 08:38:16
Done.
|
| + FormFieldData number_field = response_data.fields[i]; |
| + |
| + // Enforce 'max-length' constraint on |number_field|. |
| + size_t length = (number_field.max_length < number_field.value.size()) |
| + ? number_field.max_length |
| + : number_field.value.size(); |
|
Ilya Sherman
2014/10/28 21:48:40
You shouldn't need to do this. Just check that th
Pritam Nikam
2014/10/29 08:38:16
Done.
|
| + base::string16 card_number = number_field.value.substr(0, length); |
| + number_field.value = card_number; |
| + |
| + // Get the suggestions for credit card |number_field|. |
| + GetAutofillSuggestions(form, number_field); |
| + |
| + // No suggestions provided, so send an empty vector as the results. |
| + // This triggers the combined message send. |
| + AutocompleteSuggestionsReturned(std::vector<base::string16>()); |
| + |
| + base::string16 expected_values[] = {ASCIIToUTF16("************3456")}; |
| + base::string16 expected_labels[] = {ASCIIToUTF16("04/12")}; |
| + base::string16 expected_icons[] = {ASCIIToUTF16(kVisaCard)}; |
| + int expected_unique_ids[] = {autofill_manager_->GetPackedCreditCardID(4)}; |
| + external_delegate_->CheckSuggestions(kDefaultPageID, |
| + arraysize(expected_values), |
| + expected_values, |
| + expected_labels, |
| + expected_icons, |
| + expected_unique_ids); |
| + } |
| +} |
| + |
| } // namespace autofill |