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 f891f4102f5924a411ffc4b288f1b81d7ce55489..5139cac32e0242d8ad7d6caacccea1f2b509c268 100644 |
--- a/components/autofill/core/browser/autofill_manager_unittest.cc |
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc |
@@ -212,6 +212,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, |
@@ -2919,4 +2944,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. |
+ 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) { |
+ 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(); |
+ 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 |