Index: chrome/browser/autofill/autofill_manager_unittest.cc |
diff --git a/chrome/browser/autofill/autofill_manager_unittest.cc b/chrome/browser/autofill/autofill_manager_unittest.cc |
index b4541432843268906f37f62fff19f16fe656a6c2..bd5aca9afaba502f19b2eabd77f7a17a781014f5 100644 |
--- a/chrome/browser/autofill/autofill_manager_unittest.cc |
+++ b/chrome/browser/autofill/autofill_manager_unittest.cc |
@@ -48,9 +48,9 @@ typedef Tuple5<int, |
class TestPersonalDataManager : public PersonalDataManager { |
public: |
- TestPersonalDataManager() { |
+ explicit TestPersonalDataManager(bool four_credit_cards) { |
CreateTestAutoFillProfiles(&web_profiles_); |
- CreateTestCreditCards(&credit_cards_); |
+ CreateTestCreditCards(&credit_cards_, four_credit_cards); |
} |
virtual void InitializeIfNeeded() {} |
@@ -112,23 +112,60 @@ class TestPersonalDataManager : public PersonalDataManager { |
profiles->push_back(profile); |
} |
- void CreateTestCreditCards(ScopedVector<CreditCard>* credit_cards) { |
- CreditCard* credit_card = new CreditCard; |
- autofill_test::SetCreditCardInfo(credit_card, "First", "Elvis Presley", |
- "4234567890123456", // Visa |
- "04", "2012"); |
- credit_card->set_guid("00000000-0000-0000-0000-000000000004"); |
- credit_cards->push_back(credit_card); |
- credit_card = new CreditCard; |
- autofill_test::SetCreditCardInfo(credit_card, "Second", "Buddy Holly", |
- "5187654321098765", // Mastercard |
- "10", "2014"); |
- credit_card->set_guid("00000000-0000-0000-0000-000000000005"); |
- credit_cards->push_back(credit_card); |
- credit_card = new CreditCard; |
- autofill_test::SetCreditCardInfo(credit_card, "Empty", "", "", "", ""); |
- credit_card->set_guid("00000000-0000-0000-0000-000000000006"); |
- credit_cards->push_back(credit_card); |
+ void CreateTestCreditCards(ScopedVector<CreditCard>* credit_cards, |
+ bool four_credit_cards) { |
+ if (!four_credit_cards) { |
+ CreditCard* credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "First", "Elvis Presley", |
+ "4234567890123456", // Visa |
dhollowa
2011/01/07 20:43:39
nit: indentation should be at open paren. And bel
|
+ "04", "2012"); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000004"); |
+ credit_cards->push_back(credit_card); |
+ credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Second", "Buddy Holly", |
+ "5187654321098765", // Mastercard |
+ "10", "2014"); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000005"); |
+ credit_cards->push_back(credit_card); |
+ credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Empty", "", "", "", ""); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000006"); |
+ credit_cards->push_back(credit_card); |
+ } else { |
+ // Create four credit cards with year month combination as following, |
+ // 1. year empty, month empty |
+ CreditCard* credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Miku0", |
+ "Miku Hatsune", |
+ "4234567890654321", // Visa |
+ "", ""); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000007"); |
+ credit_cards->push_back(credit_card); |
+ // 2. year empty, month non-empty |
+ credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Miku1", |
+ "Miku Hatsune", |
+ "4234567890654321", // Visa |
+ "04", ""); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000008"); |
+ credit_cards->push_back(credit_card); |
+ // 3. year non-empty, month empty |
+ credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Miku2", |
+ "Miku Hatsune", |
+ "4234567890654321", // Visa |
+ "", "2012"); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000009"); |
+ credit_cards->push_back(credit_card); |
+ // 4. both non-empty |
+ credit_card = new CreditCard; |
+ autofill_test::SetCreditCardInfo(credit_card, "Miku3", |
+ "Miku Hatsune", |
+ "4234567890654321", // Visa |
+ "04", "2012"); |
+ credit_card->set_guid("00000000-0000-0000-0000-000000000010"); |
+ credit_cards->push_back(credit_card); |
+ } |
} |
DISALLOW_COPY_AND_ASSIGN(TestPersonalDataManager); |
@@ -181,12 +218,20 @@ void CreateTestAddressFormData(FormData* form) { |
autofill_test::CreateTestFormField( |
"Email", "email", "", "text", &field); |
form->fields.push_back(field); |
-} |
+ autofill_test::CreateTestFormField( |
+ "Email", "email2", "", "email", &field); |
+ form->fields.push_back(field); |
+ autofill_test::CreateTestFormField( |
+ "Phone Number", "phonenumber2", "", "tel", &field); |
+ form->fields.push_back(field); |
+ } |
// Populates |form| with data corresponding to a simple credit card form. |
// Note that this actually appends fields to the form data, which can be useful |
// for building up more complex test forms. |
-void CreateTestCreditCardFormData(FormData* form, bool is_https) { |
+void CreateTestCreditCardFormData(FormData* form, |
+ bool is_https, |
+ bool use_month_type) { |
form->name = ASCIIToUTF16("MyForm"); |
form->method = ASCIIToUTF16("POST"); |
if (is_https) { |
@@ -205,12 +250,18 @@ void CreateTestCreditCardFormData(FormData* form, bool is_https) { |
autofill_test::CreateTestFormField( |
"Card Number", "cardnumber", "", "text", &field); |
form->fields.push_back(field); |
- autofill_test::CreateTestFormField( |
- "Expiration Date", "ccmonth", "", "text", &field); |
- form->fields.push_back(field); |
- autofill_test::CreateTestFormField( |
- "", "ccyear", "", "text", &field); |
- form->fields.push_back(field); |
+ if (use_month_type) { |
+ autofill_test::CreateTestFormField( |
+ "Expiration Date", "ccmonth", "", "month", &field); |
+ form->fields.push_back(field); |
+ } else { |
+ autofill_test::CreateTestFormField( |
+ "Expiration Date", "ccmonth", "", "text", &field); |
+ form->fields.push_back(field); |
+ autofill_test::CreateTestFormField( |
+ "", "ccyear", "", "text", &field); |
+ form->fields.push_back(field); |
+ } |
} |
void ExpectSuggestions(int page_id, |
@@ -241,7 +292,7 @@ void ExpectSuggestions(int page_id, |
// Verifies that the |filled_form| has been filled with the given data. |
// Verifies address fields if |has_address_fields| is true, and verifies |
// credit card fields if |has_credit_card_fields| is true. Verifies both if both |
-// are true. |
+// are true. |use_month_type| is used for credit card input month type. |
void ExpectFilledForm(int page_id, |
const FormData& filled_form, |
int expected_page_id, |
@@ -262,10 +313,11 @@ void ExpectFilledForm(int page_id, |
const char* expiration_month, |
const char* expiration_year, |
bool has_address_fields, |
- bool has_credit_card_fields) { |
+ bool has_credit_card_fields, |
+ int use_month_type) { |
// The number of fields in the address and credit card forms created above. |
- const size_t kAddressFormSize = 12; |
- const size_t kCreditCardFormSize = 4; |
+ const size_t kAddressFormSize = 14; |
+ const size_t kCreditCardFormSize = use_month_type ? 3 : 4; |
EXPECT_EQ(expected_page_id, page_id); |
EXPECT_EQ(ASCIIToUTF16("MyForm"), filled_form.name); |
@@ -324,7 +376,13 @@ void ExpectFilledForm(int page_id, |
autofill_test::CreateTestFormField( |
"Email", "email", email, "text", &field); |
EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[11])); |
- } |
+ autofill_test::CreateTestFormField( |
+ "Email", "email2", email, "email", &field); |
+ EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[12])); |
+ autofill_test::CreateTestFormField( |
+ "Phone Number", "phonenumber2", phone, "tel", &field); |
+ EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[13])); |
+ } |
if (has_credit_card_fields) { |
size_t offset = has_address_fields? kAddressFormSize : 0; |
@@ -334,12 +392,23 @@ void ExpectFilledForm(int page_id, |
autofill_test::CreateTestFormField( |
"Card Number", "cardnumber", card_number, "text", &field); |
EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 1])); |
- autofill_test::CreateTestFormField( |
- "Expiration Date", "ccmonth", expiration_month, "text", &field); |
- EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 2])); |
- autofill_test::CreateTestFormField( |
- "", "ccyear", expiration_year, "text", &field); |
- EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 3])); |
+ if (use_month_type) { |
+ std::string exp_year = expiration_year; |
+ std::string exp_month = expiration_month; |
+ std::string year_month; |
+ if (!exp_year.empty() && !exp_month.empty()) |
+ year_month = exp_year + "-" + exp_month; |
+ autofill_test::CreateTestFormField("Expiration Date", "ccmonth", |
+ year_month.c_str(), "month", &field); |
+ EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 2])); |
+ } else { |
+ autofill_test::CreateTestFormField( |
+ "Expiration Date", "ccmonth", expiration_month, "text", &field); |
+ EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 2])); |
+ autofill_test::CreateTestFormField( |
+ "", "ccyear", expiration_year, "text", &field); |
+ EXPECT_TRUE(field.StrictlyEqualsHack(filled_form.fields[offset + 3])); |
+ } |
} |
} |
@@ -351,7 +420,7 @@ void ExpectFilledAddressFormElvis(int page_id, |
"Presley", "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis", |
"Tennessee", "38116", "USA", "12345678901", "", |
"theking@gmail.com", "", "", "", "", true, |
- has_credit_card_fields); |
+ has_credit_card_fields, false); |
} |
void ExpectFilledCreditCardFormElvis(int page_id, |
@@ -361,7 +430,19 @@ void ExpectFilledCreditCardFormElvis(int page_id, |
ExpectFilledForm(page_id, filled_form, expected_page_id, |
"", "", "", "", "", "", "", "", "", "", "", "", |
"Elvis Presley", "4234567890123456", "04", "2012", |
- has_address_fields, true); |
+ has_address_fields, true, false); |
+} |
+ |
+void ExpectFilledCreditCardYearMonthWithYearMonth(int page_id, |
+ const FormData& filled_form, |
+ int expected_page_id, |
+ bool has_address_fields, |
+ const char* year, |
+ const char* month) { |
+ ExpectFilledForm(page_id, filled_form, expected_page_id, |
+ "", "", "", "", "", "", "", "", "", "", "", "", |
+ "Miku Hatsune", "4234567890654321", month, year, |
+ has_address_fields, true, true); |
} |
class TestAutoFillManager : public AutoFillManager { |
@@ -433,7 +514,7 @@ class AutoFillManagerTest : public RenderViewHostTestHarness { |
virtual void SetUp() { |
RenderViewHostTestHarness::SetUp(); |
- test_personal_data_ = new TestPersonalDataManager(); |
+ test_personal_data_ = new TestPersonalDataManager(false); |
autofill_manager_.reset(new TestAutoFillManager(contents(), |
test_personal_data_.get())); |
} |
@@ -733,7 +814,7 @@ TEST_F(AutoFillManagerTest, GetProfileSuggestionsMethodGet) { |
TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsEmptyValue) { |
// Set up our form data. |
FormData form; |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -777,7 +858,7 @@ TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsEmptyValue) { |
TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsMatchCharacter) { |
// Set up our form data. |
FormData form; |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -814,7 +895,7 @@ TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsMatchCharacter) { |
TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsNonCCNumber) { |
// Set up our form data. |
FormData form; |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -858,7 +939,7 @@ TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsNonCCNumber) { |
TEST_F(AutoFillManagerTest, GetCreditCardSuggestionsNonHTTPS) { |
// Set up our form data. |
FormData form; |
- CreateTestCreditCardFormData(&form, false); |
+ CreateTestCreditCardFormData(&form, false, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -925,7 +1006,7 @@ TEST_F(AutoFillManagerTest, GetAddressAndCreditCardSuggestions) { |
// Set up our form data. |
FormData form; |
CreateTestAddressFormData(&form); |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -1002,7 +1083,7 @@ TEST_F(AutoFillManagerTest, GetAddressAndCreditCardSuggestionsNonHttps) { |
// Set up our form data. |
FormData form; |
CreateTestAddressFormData(&form); |
- CreateTestCreditCardFormData(&form, false); |
+ CreateTestCreditCardFormData(&form, false, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -1268,7 +1349,7 @@ TEST_F(AutoFillManagerTest, FillAddressForm) { |
TEST_F(AutoFillManagerTest, FillCreditCardForm) { |
// Set up our form data. |
FormData form; |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -1283,12 +1364,120 @@ TEST_F(AutoFillManagerTest, FillCreditCardForm) { |
ExpectFilledCreditCardFormElvis(page_id, results, kDefaultPageID, false); |
} |
+// Test that we correctly fill a credit card form with month input type. |
+// 1. year empty, month empty |
+TEST_F(AutoFillManagerTest, FillCreditCardFormNoYearNoMonth) { |
+ // Same as the SetUp(), but generate 4 credit cards with year month |
+ // combination. |
+ RenderViewHostTestHarness::SetUp(); |
+ test_personal_data_ = new TestPersonalDataManager(true); |
+ autofill_manager_.reset(new TestAutoFillManager(contents(), |
+ test_personal_data_.get())); |
+ // Set up our form data. |
+ FormData form; |
+ CreateTestCreditCardFormData(&form, true, true); |
+ std::vector<FormData> forms(1, form); |
+ autofill_manager_->FormsSeen(forms); |
+ |
+ std::string guid = autofill_manager_->GetLabeledCreditCard("Miku0")->guid(); |
+ EXPECT_TRUE(autofill_manager_->FillAutoFillFormData( |
+ kDefaultPageID, form, *form.fields.begin(), |
+ autofill_manager_->PackGUIDs(guid, std::string()))); |
+ |
+ int page_id = 0; |
+ FormData results; |
+ EXPECT_TRUE(GetAutoFillFormDataFilledMessage(&page_id, &results)); |
+ ExpectFilledCreditCardYearMonthWithYearMonth(page_id, results, |
+ kDefaultPageID, false, "", ""); |
+} |
+ |
+// Test that we correctly fill a credit card form with month input type. |
+// 2. year empty, month non-empty |
+TEST_F(AutoFillManagerTest, FillCreditCardFormNoYearMonth) { |
+ // Same as the SetUp(), but generate 4 credit cards with year month |
+ // combination. |
+ RenderViewHostTestHarness::SetUp(); |
+ test_personal_data_ = new TestPersonalDataManager(true); |
+ autofill_manager_.reset(new TestAutoFillManager(contents(), |
+ test_personal_data_.get())); |
+ // Set up our form data. |
+ FormData form; |
+ CreateTestCreditCardFormData(&form, true, true); |
+ std::vector<FormData> forms(1, form); |
+ autofill_manager_->FormsSeen(forms); |
+ |
+ std::string guid = autofill_manager_->GetLabeledCreditCard("Miku1")->guid(); |
+ EXPECT_TRUE(autofill_manager_->FillAutoFillFormData( |
+ kDefaultPageID, form, *form.fields.begin(), |
+ autofill_manager_->PackGUIDs(guid, std::string()))); |
+ |
+ int page_id = 0; |
+ FormData results; |
+ EXPECT_TRUE(GetAutoFillFormDataFilledMessage(&page_id, &results)); |
+ ExpectFilledCreditCardYearMonthWithYearMonth(page_id, results, |
+ kDefaultPageID, false, "", "04"); |
+} |
+ |
+// Test that we correctly fill a credit card form with month input type. |
+// 3. year non-empty, month empty |
+TEST_F(AutoFillManagerTest, FillCreditCardFormYearNoMonth) { |
+ // Same as the SetUp(), but generate 4 credit cards with year month |
+ // combination. |
+ RenderViewHostTestHarness::SetUp(); |
+ test_personal_data_ = new TestPersonalDataManager(true); |
+ autofill_manager_.reset(new TestAutoFillManager(contents(), |
+ test_personal_data_.get())); |
+ // Set up our form data. |
+ FormData form; |
+ CreateTestCreditCardFormData(&form, true, true); |
+ std::vector<FormData> forms(1, form); |
+ autofill_manager_->FormsSeen(forms); |
+ |
+ std::string guid = autofill_manager_->GetLabeledCreditCard("Miku2")->guid(); |
+ EXPECT_TRUE(autofill_manager_->FillAutoFillFormData( |
+ kDefaultPageID, form, *form.fields.begin(), |
+ autofill_manager_->PackGUIDs(guid, std::string()))); |
+ |
+ int page_id = 0; |
+ FormData results; |
+ EXPECT_TRUE(GetAutoFillFormDataFilledMessage(&page_id, &results)); |
+ ExpectFilledCreditCardYearMonthWithYearMonth(page_id, results, |
+ kDefaultPageID, false, "2012", ""); |
+} |
+ |
+// Test that we correctly fill a credit card form with month input type. |
+// 4. year non-empty, month empty |
+TEST_F(AutoFillManagerTest, FillCreditCardFormYearMonth) { |
+ // Same as the SetUp(), but generate 4 credit cards with year month |
+ // combination. |
+ RenderViewHostTestHarness::SetUp(); |
+ test_personal_data_ = new TestPersonalDataManager(true); |
+ autofill_manager_.reset(new TestAutoFillManager(contents(), |
+ test_personal_data_.get())); |
+ // Set up our form data. |
+ FormData form; |
+ CreateTestCreditCardFormData(&form, true, true); |
+ std::vector<FormData> forms(1, form); |
+ autofill_manager_->FormsSeen(forms); |
+ |
+ std::string guid = autofill_manager_->GetLabeledCreditCard("Miku3")->guid(); |
+ EXPECT_TRUE(autofill_manager_->FillAutoFillFormData( |
+ kDefaultPageID, form, *form.fields.begin(), |
+ autofill_manager_->PackGUIDs(guid, std::string()))); |
+ |
+ int page_id = 0; |
+ FormData results; |
+ EXPECT_TRUE(GetAutoFillFormDataFilledMessage(&page_id, &results)); |
+ ExpectFilledCreditCardYearMonthWithYearMonth(page_id, results, |
+ kDefaultPageID, false, "2012", "04"); |
+} |
+ |
// Test that we correctly fill a combined address and credit card form. |
TEST_F(AutoFillManagerTest, FillAddressAndCreditCardForm) { |
// Set up our form data. |
FormData form; |
CreateTestAddressFormData(&form); |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -1329,7 +1518,7 @@ TEST_F(AutoFillManagerTest, FillAutoFilledForm) { |
CreateTestAddressFormData(&form); |
// Mark one of the address fields as autofilled. |
form.fields[4].set_autofilled(true); |
- CreateTestCreditCardFormData(&form, true); |
+ CreateTestCreditCardFormData(&form, true, false); |
std::vector<FormData> forms(1, form); |
autofill_manager_->FormsSeen(forms); |
@@ -1346,7 +1535,7 @@ TEST_F(AutoFillManagerTest, FillAutoFilledForm) { |
SCOPED_TRACE("Address"); |
ExpectFilledForm(page_id, results, kDefaultPageID, |
"Elvis", "", "", "", "", "", "", "", "", "", "", "", |
- "", "", "", "", true, true); |
+ "", "", "", "", true, true, false); |
} |
// Now fill the credit card data. |
@@ -1384,7 +1573,7 @@ TEST_F(AutoFillManagerTest, FillAutoFilledForm) { |
SCOPED_TRACE("Credit card 2"); |
ExpectFilledForm(page_id, results, kPageID3, |
"", "", "", "", "", "", "", "", "", "", "", "", |
- "", "", "", "2012", true, true); |
+ "", "", "", "2012", true, true, false); |
} |
} |