| 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
|
|
|