Index: components/autofill/core/browser/validation_unittest.cc |
diff --git a/components/autofill/core/browser/validation_unittest.cc b/components/autofill/core/browser/validation_unittest.cc |
index c2589da9d7a0a2771c8dedcd5dacf6f1add13834..1e3a6e9d009af5d41e6523985b3fecdee819bec8 100644 |
--- a/components/autofill/core/browser/validation_unittest.cc |
+++ b/components/autofill/core/browser/validation_unittest.cc |
@@ -38,24 +38,24 @@ struct SecurityCodeCardTypePair { |
// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm |
const char* const kValidNumbers[] = { |
- "378282246310005", |
- "3714 4963 5398 431", |
- "3787-3449-3671-000", |
- "5610591081018250", |
- "3056 9309 0259 04", |
- "3852-0000-0232-37", |
- "6011111111111117", |
- "6011 0009 9013 9424", |
- "3530-1113-3330-0000", |
- "3566002020360505", |
- "5555 5555 5555 4444", |
- "5105-1051-0510-5100", |
- "4111111111111111", |
- "4012 8888 8888 1881", |
- "4222-2222-2222-2", |
- "5019717010103742", |
- "6331101999990016", |
- "6247130048162403", |
+ "378282246310005", |
+ "3714 4963 5398 431", |
+ "3787-3449-3671-000", |
+ "5610591081018250", |
+ "3056 9309 0259 04", |
+ "3852-0000-0232-37", |
+ "6011111111111117", |
+ "6011 0009 9013 9424", |
+ "3530-1113-3330-0000", |
+ "3566002020360505", |
+ "5555 5555 5555 4444", // Mastercard. |
+ "5105-1051-0510-5100", |
+ "4111111111111111", // Visa. |
+ "4012 8888 8888 1881", |
+ "4222-2222-2222-2", |
+ "5019717010103742", |
+ "6331101999990016", |
+ "6247130048162403", |
}; |
const char* const kInvalidNumbers[] = { |
"4111 1111 112", /* too short */ |
@@ -230,46 +230,6 @@ INSTANTIATE_TEST_CASE_P( |
IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED))); |
INSTANTIATE_TEST_CASE_P( |
- CreditCardNumber, |
- AutofillTypeValidationTest, |
- testing::Values( |
- ValidationCase(kValidNumbers[0], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[1], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[2], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[3], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[4], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[5], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[6], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[7], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[8], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[9], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[10], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[11], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[12], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[13], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[14], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[15], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[16], CREDIT_CARD_NUMBER, true, 0), |
- ValidationCase(kValidNumbers[17], CREDIT_CARD_NUMBER, true, 0), |
- |
- ValidationCase(kInvalidNumbers[0], |
- CREDIT_CARD_NUMBER, |
- false, |
- IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
- ValidationCase(kInvalidNumbers[1], |
- CREDIT_CARD_NUMBER, |
- false, |
- IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
- ValidationCase(kInvalidNumbers[2], |
- CREDIT_CARD_NUMBER, |
- false, |
- IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
- ValidationCase(kInvalidNumbers[3], |
- CREDIT_CARD_NUMBER, |
- false, |
- IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE))); |
- |
-INSTANTIATE_TEST_CASE_P( |
CreditCardMonth, |
AutofillTypeValidationTest, |
testing::Values( |
@@ -352,4 +312,104 @@ INSTANTIATE_TEST_CASE_P( |
false, |
IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR))); |
+struct CCNumberCase { |
+ CCNumberCase(const char* value, |
+ const std::set<std::string> supported_basic_card_networks, |
+ bool expected_valid, |
+ int expected_error_id) |
+ : value(value), |
+ supported_basic_card_networks(supported_basic_card_networks), |
+ expected_valid(expected_valid), |
+ expected_error_id(expected_error_id) {} |
+ ~CCNumberCase() {} |
+ |
+ const char* const value; |
+ const std::set<std::string> supported_basic_card_networks; |
+ const bool expected_valid; |
+ const int expected_error_id; |
+}; |
+ |
+class AutofillCCNumberValidationTest |
+ : public testing::TestWithParam<CCNumberCase> {}; |
+ |
+TEST_P(AutofillCCNumberValidationTest, IsValidCreditCardNumber) { |
+ base::string16 error_message; |
+ EXPECT_EQ(GetParam().expected_valid, |
+ IsValidCreditCardNumberForBasicCardNetworks( |
+ ASCIIToUTF16(GetParam().value), |
+ GetParam().supported_basic_card_networks, &error_message)) |
+ << "Failed to validate CC number " << GetParam().value; |
+ if (!GetParam().expected_valid) { |
+ EXPECT_EQ(l10n_util::GetStringUTF16(GetParam().expected_error_id), |
+ error_message); |
+ } |
+} |
+ |
+const static std::set<std::string> kAllBasicCardNetworks{ |
+ "amex", "discover", "diners", "jcb", |
+ "mastercard", "mir", "unionpay", "visa"}; |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ CreditCardNumber, |
+ AutofillCCNumberValidationTest, |
+ testing::Values( |
+ CCNumberCase(kValidNumbers[0], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[1], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[2], kAllBasicCardNetworks, true, 0), |
+ // Generic card not supported. |
+ CCNumberCase(kValidNumbers[3], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE), |
+ |
+ CCNumberCase(kValidNumbers[4], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[5], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[6], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[7], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[8], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[9], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[10], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[11], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[12], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[13], kAllBasicCardNetworks, true, 0), |
+ CCNumberCase(kValidNumbers[14], kAllBasicCardNetworks, true, 0), |
+ // Generic cards not supported. |
+ CCNumberCase(kValidNumbers[15], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE), |
+ CCNumberCase(kValidNumbers[16], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE), |
+ |
+ CCNumberCase(kValidNumbers[17], kAllBasicCardNetworks, true, 0), |
+ |
+ CCNumberCase(kInvalidNumbers[0], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
+ CCNumberCase(kInvalidNumbers[1], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
+ CCNumberCase(kInvalidNumbers[2], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
+ CCNumberCase(kInvalidNumbers[3], |
+ kAllBasicCardNetworks, |
+ false, |
+ IDS_PAYMENTS_CARD_NUMBER_INVALID_VALIDATION_MESSAGE), |
+ |
+ // Valid numbers can still be invalid if the type is not supported. |
+ CCNumberCase(kValidNumbers[10], // Mastercard number. |
+ {"visa"}, |
+ false, |
+ IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE), |
+ CCNumberCase(kValidNumbers[12], // Visa number. |
+ {"jcb", "diners", "unionpay", "mastercard"}, |
+ false, |
+ IDS_PAYMENTS_VALIDATION_UNSUPPORTED_CREDIT_CARD_TYPE))); |
+ |
} // namespace autofill |