| 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 fa10822aa1c0210ac82fb724c0bd9faad825953d..d95af5fd67728df4ec7c45e33a05d2a2cf4db6e0 100644
 | 
| --- a/components/autofill/core/browser/autofill_field_unittest.cc
 | 
| +++ b/components/autofill/core/browser/autofill_field_unittest.cc
 | 
| @@ -49,6 +49,32 @@ size_t GetNumberOffset(size_t index, const TestCase& test) {
 | 
|    return result;
 | 
|  }
 | 
|  
 | 
| +// Helper function to test |GetCreditCardNumberValue()|.
 | 
| +void TestGetCreditCardNumberValue(const TestCase& test) {
 | 
| +  size_t offset = 0;
 | 
| +  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];
 | 
| +    offset += (i == 0) ? 0 : test.splits_[i - 1];
 | 
| +    cc_number_part.set_credit_card_number_offset(offset);
 | 
| +
 | 
| +    // Retrive the value for |cc_number_part|.
 | 
| +    base::string16 actual = AutofillField::GetCreditCardNumberValue(
 | 
| +        cc_number_part, ASCIIToUTF16(test.card_number_));
 | 
| +
 | 
| +    // Enforce the field's |max_length| constraint. Please note that, normally
 | 
| +    // this would be handled on renderer, which is why it needs to be specially
 | 
| +    // handled in the unit test.
 | 
| +    actual = (offset < test.card_number_.length())
 | 
| +                 ? actual.substr(0, test.splits_[i])
 | 
| +                 : base::string16();
 | 
| +
 | 
| +    // Verify for expected results.
 | 
| +    EXPECT_EQ(ASCIIToUTF16(test.expected_results_[i]), actual);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  TEST(AutofillFieldTest, Type) {
 | 
|    AutofillField field;
 | 
|    ASSERT_EQ(NO_SERVER_DATA, field.server_type());
 | 
| @@ -622,5 +648,59 @@ TEST(AutofillFieldTest, FillCreditCardNumberWithUnequalSizeSplits) {
 | 
|    EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value);
 | 
|  }
 | 
|  
 | 
| +TEST(AutofillFieldTest, GetCreditCardNumberValue_OffsetsLessThanDigits) {
 | 
| +  TestCase test;
 | 
| +  test.card_number_ = "5187654321098765";
 | 
| +
 | 
| +  // Offset for all card number input fields are less than the size of digits on
 | 
| +  // the card.
 | 
| +  size_t max_lengths[] = {4, 4, 4, 4};
 | 
| +  std::string expectations[] = {"5187", "6543", "2109", "8765"};
 | 
| +  test.total_spilts_ = arraysize(max_lengths);
 | 
| +  test.splits_ =
 | 
| +      std::vector<int>(max_lengths, max_lengths + arraysize(max_lengths));
 | 
| +  test.expected_results_ = std::vector<std::string>(
 | 
| +      expectations, expectations + arraysize(expectations));
 | 
| +
 | 
| +  // Verify against the expectations.
 | 
| +  TestGetCreditCardNumberValue(test);
 | 
| +}
 | 
| +
 | 
| +TEST(AutofillFieldTest, GetCreditCardNumberValue_OffsetsEqualsDigits) {
 | 
| +  TestCase test;
 | 
| +  test.card_number_ = "5187654321098765";
 | 
| +
 | 
| +  // Offset for second card number input field is equals to the size of digits
 | 
| +  // on the card.
 | 
| +  size_t max_lengths[] = {16, 4};
 | 
| +  std::string expectations[] = {"5187654321098765", std::string()};
 | 
| +  test.total_spilts_ = arraysize(max_lengths);
 | 
| +  test.splits_ =
 | 
| +      std::vector<int>(max_lengths, max_lengths + arraysize(max_lengths));
 | 
| +  test.expected_results_ = std::vector<std::string>(
 | 
| +      expectations, expectations + arraysize(expectations));
 | 
| +
 | 
| +  // Verify against the expectations.
 | 
| +  TestGetCreditCardNumberValue(test);
 | 
| +}
 | 
| +
 | 
| +TEST(AutofillFieldTest, GetCreditCardNumberValue_OffsetsGreaterThanDigits) {
 | 
| +  TestCase test;
 | 
| +  test.card_number_ = "5187654321098765";
 | 
| +
 | 
| +  // Offset for second card number input field is greater than the size of
 | 
| +  // digits on the card.
 | 
| +  size_t max_lengths[] = {20, 16};
 | 
| +  std::string expectations[] = {"5187654321098765", std::string()};
 | 
| +  test.total_spilts_ = arraysize(max_lengths);
 | 
| +  test.splits_ =
 | 
| +      std::vector<int>(max_lengths, max_lengths + arraysize(max_lengths));
 | 
| +  test.expected_results_ = std::vector<std::string>(
 | 
| +      expectations, expectations + arraysize(expectations));
 | 
| +
 | 
| +  // Verify against the expectations.
 | 
| +  TestGetCreditCardNumberValue(test);
 | 
| +}
 | 
| +
 | 
|  }  // namespace
 | 
|  }  // namespace autofill
 | 
| 
 |