| Index: components/autofill/core/browser/credit_card_unittest.cc
|
| diff --git a/components/autofill/core/browser/credit_card_unittest.cc b/components/autofill/core/browser/credit_card_unittest.cc
|
| index 224f77657fca012824775f040314df19c454281d..7a5a9c8da6b92e9f96124f7b18d54a8dbdc2e13b 100644
|
| --- a/components/autofill/core/browser/credit_card_unittest.cc
|
| +++ b/components/autofill/core/browser/credit_card_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "components/autofill/core/browser/autofill_common_test.h"
|
| #include "components/autofill/core/browser/credit_card.h"
|
| +#include "components/autofill/core/browser/validation.h"
|
| #include "components/autofill/core/common/form_field_data.h"
|
| #include "grit/webkit_resources.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -271,7 +272,8 @@ TEST(CreditCardTest, InvalidMastercardNumber) {
|
|
|
| test::SetCreditCardInfo(&card, "Baby Face Nelson",
|
| "5200000000000004", "01", "2010");
|
| - EXPECT_EQ("genericCC", card.type());
|
| + EXPECT_EQ(kMasterCard, card.type());
|
| + EXPECT_FALSE(card.IsComplete());
|
| }
|
|
|
| // Verify that we preserve exactly what the user typed for credit card numbers.
|
| @@ -488,4 +490,165 @@ TEST(CreditCardTest, CreditCardTypeSelectControl) {
|
| }
|
| }
|
|
|
| +TEST(CreditCardTest, GetCreditCardType) {
|
| + struct {
|
| + std::string card_number;
|
| + std::string type;
|
| + bool is_valid;
|
| + } test_cases[] = {
|
| + // The relevant sample numbers from
|
| + // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
|
| + { "378282246310005", kAmericanExpressCard, true },
|
| + { "371449635398431", kAmericanExpressCard, true },
|
| + { "378734493671000", kAmericanExpressCard, true },
|
| + { "30569309025904", kDinersCard, true },
|
| + { "38520000023237", kDinersCard, true },
|
| + { "6011111111111117", kDiscoverCard, true },
|
| + { "6011000990139424", kDiscoverCard, true },
|
| + { "3530111333300000", kJCBCard, true },
|
| + { "3566002020360505", kJCBCard, true },
|
| + { "5555555555554444", kMasterCard, true },
|
| + { "5105105105105100", kMasterCard, true },
|
| + { "4111111111111111", kVisaCard, true },
|
| + { "4012888888881881", kVisaCard, true },
|
| + { "4222222222222", kVisaCard, true },
|
| +
|
| + // The relevant sample numbers from
|
| + // http://auricsystems.com/support-center/sample-credit-card-numbers/
|
| + { "343434343434343", kAmericanExpressCard, true },
|
| + { "371144371144376", kAmericanExpressCard, true },
|
| + { "341134113411347", kAmericanExpressCard, true },
|
| + { "36438936438936", kDinersCard, true },
|
| + { "36110361103612", kDinersCard, true },
|
| + { "36111111111111", kDinersCard, true },
|
| + { "6011016011016011", kDiscoverCard, true },
|
| + { "6011000990139424", kDiscoverCard, true },
|
| + { "6011000000000004", kDiscoverCard, true },
|
| + { "6011000995500000", kDiscoverCard, true },
|
| + { "6500000000000002", kDiscoverCard, true },
|
| + { "3566002020360505", kJCBCard, true },
|
| + { "3528000000000007", kJCBCard, true },
|
| + { "5500005555555559", kMasterCard, true },
|
| + { "5555555555555557", kMasterCard, true },
|
| + { "5454545454545454", kMasterCard, true },
|
| + { "5555515555555551", kMasterCard, true },
|
| + { "5405222222222226", kMasterCard, true },
|
| + { "5478050000000007", kMasterCard, true },
|
| + { "5111005111051128", kMasterCard, true },
|
| + { "5112345112345114", kMasterCard, true },
|
| + { "5115915115915118", kMasterCard, true },
|
| +
|
| + // Empty string
|
| + { std::string(), kGenericCard, false },
|
| +
|
| + // Non-numeric
|
| + { "garbage", kGenericCard, false },
|
| + { "4garbage", kVisaCard, false },
|
| +
|
| + // Fails Luhn check.
|
| + { "4111111111111112", kVisaCard, false },
|
| +
|
| + // Invalid length.
|
| + { "3434343434343434", kAmericanExpressCard, false },
|
| + { "411111111111116", kVisaCard, false },
|
| +
|
| + // Issuer Identification Numbers (IINs) that Chrome recognizes.
|
| + { "4", kVisaCard, false },
|
| + { "34", kAmericanExpressCard, false },
|
| + { "37", kAmericanExpressCard, false },
|
| + { "300", kDinersCard, false },
|
| + { "301", kDinersCard, false },
|
| + { "302", kDinersCard, false },
|
| + { "303", kDinersCard, false },
|
| + { "304", kDinersCard, false },
|
| + { "305", kDinersCard, false },
|
| + { "3095", kDinersCard, false },
|
| + { "36", kDinersCard, false },
|
| + { "38", kDinersCard, false },
|
| + { "39", kDinersCard, false },
|
| + { "6011", kDiscoverCard, false },
|
| + { "644", kDiscoverCard, false },
|
| + { "645", kDiscoverCard, false },
|
| + { "646", kDiscoverCard, false },
|
| + { "647", kDiscoverCard, false },
|
| + { "648", kDiscoverCard, false },
|
| + { "649", kDiscoverCard, false },
|
| + { "65", kDiscoverCard, false },
|
| + { "3528", kJCBCard, false },
|
| + { "3531", kJCBCard, false },
|
| + { "3589", kJCBCard, false },
|
| + { "51", kMasterCard, false },
|
| + { "52", kMasterCard, false },
|
| + { "53", kMasterCard, false },
|
| + { "54", kMasterCard, false },
|
| + { "55", kMasterCard, false },
|
| +
|
| + // Not enough data to determine an IIN uniquely.
|
| + { "3", kGenericCard, false },
|
| + { "30", kGenericCard, false },
|
| + { "309", kGenericCard, false },
|
| + { "35", kGenericCard, false },
|
| + { "5", kGenericCard, false },
|
| + { "6", kGenericCard, false },
|
| + { "60", kGenericCard, false },
|
| + { "601", kGenericCard, false },
|
| + { "64", kGenericCard, false },
|
| +
|
| + // Unknown IINs.
|
| + { "0", kGenericCard, false },
|
| + { "1", kGenericCard, false },
|
| + { "2", kGenericCard, false },
|
| + { "306", kGenericCard, false },
|
| + { "307", kGenericCard, false },
|
| + { "308", kGenericCard, false },
|
| + { "3091", kGenericCard, false },
|
| + { "3094", kGenericCard, false },
|
| + { "3096", kGenericCard, false },
|
| + { "31", kGenericCard, false },
|
| + { "32", kGenericCard, false },
|
| + { "33", kGenericCard, false },
|
| + { "351", kGenericCard, false },
|
| + { "3527", kGenericCard, false },
|
| + { "359", kGenericCard, false },
|
| + { "50", kGenericCard, false },
|
| + { "56", kGenericCard, false },
|
| + { "57", kGenericCard, false },
|
| + { "58", kGenericCard, false },
|
| + { "59", kGenericCard, false },
|
| + { "600", kGenericCard, false },
|
| + { "602", kGenericCard, false },
|
| + { "603", kGenericCard, false },
|
| + { "604", kGenericCard, false },
|
| + { "605", kGenericCard, false },
|
| + { "606", kGenericCard, false },
|
| + { "607", kGenericCard, false },
|
| + { "608", kGenericCard, false },
|
| + { "609", kGenericCard, false },
|
| + { "61", kGenericCard, false },
|
| + { "62", kGenericCard, false },
|
| + { "63", kGenericCard, false },
|
| + { "640", kGenericCard, false },
|
| + { "641", kGenericCard, false },
|
| + { "642", kGenericCard, false },
|
| + { "643", kGenericCard, false },
|
| + { "66", kGenericCard, false },
|
| + { "67", kGenericCard, false },
|
| + { "68", kGenericCard, false },
|
| + { "69", kGenericCard, false },
|
| + { "7", kGenericCard, false },
|
| + { "8", kGenericCard, false },
|
| + { "9", kGenericCard, false },
|
| +
|
| + // Oddball case: Unknown issuer, but valid Luhn check and plausible length.
|
| + { "7000700070007000", kGenericCard, true },
|
| + };
|
| +
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
|
| + base::string16 card_number = ASCIIToUTF16(test_cases[i].card_number);
|
| + SCOPED_TRACE(card_number);
|
| + EXPECT_EQ(test_cases[i].type, CreditCard::GetCreditCardType(card_number));
|
| + EXPECT_EQ(test_cases[i].is_valid, IsValidCreditCardNumber(card_number));
|
| + }
|
| +}
|
| +
|
| } // namespace autofill
|
|
|