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

Unified Diff: components/autofill/core/browser/autofill_field_unittest.cc

Issue 381613005: [Autofill] Autofill fails to fill credit card number when split across fields. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated review inputs. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/autofill_field_unittest.cc
diff --git a/components/autofill/core/browser/autofill_field_unittest.cc b/components/autofill/core/browser/autofill_field_unittest.cc
index 9d0f3ac3ae77f8a6f714fa431a99ced4add3481b..fa10822aa1c0210ac82fb724c0bd9faad825953d 100644
--- a/components/autofill/core/browser/autofill_field_unittest.cc
+++ b/components/autofill/core/browser/autofill_field_unittest.cc
@@ -34,6 +34,21 @@ FormFieldData GenerateSelectFieldWithOptions(const char* const* options,
return form_field;
}
+struct TestCase {
+ std::string card_number_;
+ size_t total_spilts_;
+ std::vector<int> splits_;
+ std::vector<std::string> expected_results_;
+};
+
+// Returns the offset to be set within the credit card number field.
+size_t GetNumberOffset(size_t index, const TestCase& test) {
+ size_t result = 0;
+ for (size_t i = 0; i < index; ++i)
+ result += test.splits_[i];
+ return result;
+}
+
TEST(AutofillFieldTest, Type) {
AutofillField field;
ASSERT_EQ(NO_SERVER_DATA, field.server_type());
@@ -503,5 +518,109 @@ TEST(AutofillFieldTest, FillStreetAddressTextField) {
EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value);
}
+TEST(AutofillFieldTest, FillCreditCardNumberWithoutSplits) {
+ // Case 1: card number without any spilt.
+ AutofillField cc_number_full;
+ cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER);
+ AutofillField::FillFormField(cc_number_full,
+ ASCIIToUTF16("4111111111111111"),
+ "en-US",
+ "en-US",
+ &cc_number_full);
+
+ // Verify that full card-number shall get fill properly.
+ EXPECT_EQ(ASCIIToUTF16("4111111111111111"), cc_number_full.value);
+ EXPECT_EQ(0U, cc_number_full.credit_card_number_offset());
+}
+
+TEST(AutofillFieldTest, FillCreditCardNumberWithEqualSizeSplits) {
+ // Case 2: card number broken up into four equal groups, of length 4.
+ TestCase test;
+ test.card_number_ = "5187654321098765";
+ test.total_spilts_ = 4;
+ int splits[] = {4, 4, 4, 4};
+ test.splits_ = std::vector<int>(splits, splits + arraysize(splits));
+ std::string results[] = {"5187", "6543", "2109", "8765"};
+ test.expected_results_ =
+ std::vector<std::string>(results, results + arraysize(results));
+
+ for (size_t i = 0; i < test.total_spilts_; ++i) {
+ AutofillField cc_number_part;
+ cc_number_part.set_heuristic_type(CREDIT_CARD_NUMBER);
+ cc_number_part.max_length = test.splits_[i];
+ cc_number_part.set_credit_card_number_offset(4 * i);
+
+ // Fill with a card-number; should fill just the card_number_part.
+ AutofillField::FillFormField(cc_number_part,
+ ASCIIToUTF16(test.card_number_),
+ "en-US",
+ "en-US",
+ &cc_number_part);
+
+ // Verify for expected results.
+ EXPECT_EQ(ASCIIToUTF16(test.expected_results_[i]),
+ cc_number_part.value.substr(0, cc_number_part.max_length));
+ EXPECT_EQ(4 * i, cc_number_part.credit_card_number_offset());
+ }
+
+ // Verify that full card-number shall get fill properly as well.
+ AutofillField cc_number_full;
+ cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER);
+ AutofillField::FillFormField(cc_number_full,
+ ASCIIToUTF16(test.card_number_),
+ "en-US",
+ "en-US",
+ &cc_number_full);
+
+ // Verify for expected results.
+ EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value);
+}
+
+TEST(AutofillFieldTest, FillCreditCardNumberWithUnequalSizeSplits) {
+ // Case 3: card with 15 digits number, broken up into three unequal groups, of
+ // lengths 4, 6, and 5.
+ TestCase test;
+ test.card_number_ = "423456789012345";
+ test.total_spilts_ = 3;
+ int splits[] = {4, 6, 5};
+ test.splits_ = std::vector<int>(splits, splits + arraysize(splits));
+ std::string results[] = {"4234", "567890", "12345"};
+ test.expected_results_ =
+ std::vector<std::string>(results, results + arraysize(results));
+
+ // Start executing test cases to verify parts and full credit card number.
+ for (size_t i = 0; i < test.total_spilts_; ++i) {
+ AutofillField cc_number_part;
+ cc_number_part.set_heuristic_type(CREDIT_CARD_NUMBER);
+ cc_number_part.max_length = test.splits_[i];
+ cc_number_part.set_credit_card_number_offset(GetNumberOffset(i, test));
+
+ // Fill with a card-number; should fill just the card_number_part.
+ AutofillField::FillFormField(cc_number_part,
+ ASCIIToUTF16(test.card_number_),
+ "en-US",
+ "en-US",
+ &cc_number_part);
+
+ // Verify for expected results.
+ EXPECT_EQ(ASCIIToUTF16(test.expected_results_[i]),
+ cc_number_part.value.substr(0, cc_number_part.max_length));
+ EXPECT_EQ(GetNumberOffset(i, test),
+ cc_number_part.credit_card_number_offset());
+ }
+
+ // Verify that full card-number shall get fill properly as well.
+ AutofillField cc_number_full;
+ cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER);
+ AutofillField::FillFormField(cc_number_full,
+ ASCIIToUTF16(test.card_number_),
+ "en-US",
+ "en-US",
+ &cc_number_full);
+
+ // Verify for expected results.
+ EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value);
+}
+
} // namespace
} // namespace autofill
« no previous file with comments | « components/autofill/core/browser/autofill_field.cc ('k') | components/autofill/core/browser/autofill_scanner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698