summaryrefslogtreecommitdiff
path: root/chromium/components/autofill/core/browser/validation_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/autofill/core/browser/validation_unittest.cc')
-rw-r--r--chromium/components/autofill/core/browser/validation_unittest.cc302
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