Chromium Code Reviews| 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..fb37e164cf88354eb316405cb1275c9bde8d703d 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(const size_t& index, const TestCase& test) { |
|
Ilya Sherman
2014/09/03 23:25:27
Sorry for not being clear enough: You should conti
Pritam Nikam
2014/09/04 06:58:03
Done.
|
| + 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 |