diff options
Diffstat (limited to 'chromium/components/autofill/core/browser/validation_unittest.cc')
-rw-r--r-- | chromium/components/autofill/core/browser/validation_unittest.cc | 302 |
1 files changed, 283 insertions, 19 deletions
diff --git a/chromium/components/autofill/core/browser/validation_unittest.cc b/chromium/components/autofill/core/browser/validation_unittest.cc index 798f53462bd..ec6ff0a346f 100644 --- a/chromium/components/autofill/core/browser/validation_unittest.cc +++ b/chromium/components/autofill/core/browser/validation_unittest.cc @@ -2,14 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "components/autofill/core/browser/validation.h" + #include <stddef.h> #include "base/macros.h" +#include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "components/autofill/core/browser/credit_card.h" -#include "components/autofill/core/browser/validation.h" +#include "components/autofill/core/browser/field_types.h" +#include "components/strings/grit/components_strings.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/l10n/l10n_util.h" using base::ASCIIToUTF16; @@ -33,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 */ @@ -148,4 +153,263 @@ TEST(AutofillValidation, IsValidEmailAddress) { } } +struct ValidationCase { + ValidationCase(const char* value, + ServerFieldType field_type, + bool expected_valid, + int expected_error_id) + : value(value), + field_type(field_type), + expected_valid(expected_valid), + expected_error_id(expected_error_id) {} + ~ValidationCase() {} + + const char* const value; + const ServerFieldType field_type; + const bool expected_valid; + const int expected_error_id; +}; + +class AutofillTypeValidationTest + : public testing::TestWithParam<ValidationCase> {}; + +TEST_P(AutofillTypeValidationTest, IsValidForType) { + base::string16 error_message; + EXPECT_EQ(GetParam().expected_valid, + IsValidForType(ASCIIToUTF16(GetParam().value), + GetParam().field_type, &error_message)) + << "Failed to validate " << GetParam().value << " (type " + << GetParam().field_type << ")"; + if (!GetParam().expected_valid) { + EXPECT_EQ(l10n_util::GetStringUTF16(GetParam().expected_error_id), + error_message); + } +} + +INSTANTIATE_TEST_CASE_P( + CreditCardExpDate, + AutofillTypeValidationTest, + testing::Values( + ValidationCase("05/2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), + ValidationCase("05-2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), + ValidationCase("052087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), + ValidationCase("05|2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), + + ValidationCase("05/2012", + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), + ValidationCase("MM/2012", + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), + ValidationCase("05/12", + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), + ValidationCase("05/45", + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), + ValidationCase("05/1987", + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), + + ValidationCase("05/87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), + ValidationCase("05-87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), + ValidationCase("0587", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), + ValidationCase("05|87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), + ValidationCase("05/1987", + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), + ValidationCase("05/12", + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED))); + +INSTANTIATE_TEST_CASE_P( + CreditCardMonth, + AutofillTypeValidationTest, + testing::Values( + ValidationCase("01", CREDIT_CARD_EXP_MONTH, true, 0), + ValidationCase("1", CREDIT_CARD_EXP_MONTH, true, 0), + ValidationCase("12", CREDIT_CARD_EXP_MONTH, true, 0), + ValidationCase( + "0", + CREDIT_CARD_EXP_MONTH, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), + ValidationCase( + "-1", + CREDIT_CARD_EXP_MONTH, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), + ValidationCase( + "13", + CREDIT_CARD_EXP_MONTH, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH))); + +INSTANTIATE_TEST_CASE_P( + CreditCardYear, + AutofillTypeValidationTest, + testing::Values( + /* 2-digit year */ + ValidationCase("87", CREDIT_CARD_EXP_2_DIGIT_YEAR, true, 0), + // These are considered expired in the context of this millenium. + ValidationCase("02", + CREDIT_CARD_EXP_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), + ValidationCase("15", + CREDIT_CARD_EXP_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), + // Invalid formats. + ValidationCase( + "1", + CREDIT_CARD_EXP_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), + ValidationCase( + "123", + CREDIT_CARD_EXP_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), + ValidationCase( + "2087", + CREDIT_CARD_EXP_2_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), + + /* 4-digit year */ + ValidationCase("2087", CREDIT_CARD_EXP_4_DIGIT_YEAR, true, 0), + // Expired. + ValidationCase("2000", + CREDIT_CARD_EXP_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), + ValidationCase("2015", + CREDIT_CARD_EXP_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), + // Invalid formats. + ValidationCase( + "00", + CREDIT_CARD_EXP_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), + ValidationCase( + "123", + CREDIT_CARD_EXP_4_DIGIT_YEAR, + false, + IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), + ValidationCase( + "87", + CREDIT_CARD_EXP_4_DIGIT_YEAR, + 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 |