blob: 939917d402fde498aae658b5fb4f795fa4b7723f [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/time.h"
#include "base/utf_string_conversions.h"
#include "components/autofill/browser/validation.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace autofill {
namespace {
struct ExpirationDate {
const char* year;
const char* month;
};
// 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",
};
const char* const kInvalidNumbers[] = {
"4111 1111 112", /* too short */
"41111111111111111115", /* too long */
"4111-1111-1111-1110", /* wrong Luhn checksum */
"3056 9309 0259 04aa", /* non-digit characters */
};
const char kCurrentDate[]="1 May 2013";
const ExpirationDate kValidCreditCardExpirationDate[] = {
{ "2013", "5" }, // Valid month in current year.
{ "2014", "1" }, // Any month in next year.
{ "2014", " 1" }, // Whitespace in month.
{ " 2014", "1" }, // Whitespace in year.
};
const ExpirationDate kInvalidCreditCardExpirationDate[] = {
{ "2013", "04" }, // Previous month in current year.
{ "2012", "12" }, // Any month in previous year.
};
const char* const kValidCreditCardSecurityCode[] = {
"323", // 3-digit CSC.
"3234", // 4-digit CSC.
};
const char* const kInvalidCreditCardSecurityCode[] = {
"32", // CSC too short.
"12345", // CSC too long.
"asd", // non-numeric CSC.
};
const char* const kValidEmailAddress[] = {
"user@example",
"[email protected]",
"[email protected]",
"[email protected]",
};
const char* const kInvalidEmailAddress[] = {
"user",
"foo.com",
"user@",
"user@=example.com"
};
const char kAmericanExpressCard[] = "341111111111111";
const char kVisaCard[] = "4111111111111111";
const char kAmericanExpressCVC[] = "1234";
const char kVisaCVC[] = "123";
} // namespace
TEST(AutofillValidation, IsValidCreditCardNumber) {
for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
SCOPED_TRACE(kValidNumbers[i]);
EXPECT_TRUE(
autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i])));
}
for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
SCOPED_TRACE(kInvalidNumbers[i]);
EXPECT_FALSE(
autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
}
}
TEST(AutofillValidation, IsValidCreditCardExpirationDate)
{
base::Time now;
ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) {
const ExpirationDate data = kValidCreditCardExpirationDate[i];
SCOPED_TRACE(data.year);
SCOPED_TRACE(data.month);
EXPECT_TRUE(
autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
ASCIIToUTF16(data.month),
now));
}
for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) {
const ExpirationDate data = kInvalidCreditCardExpirationDate[i];
SCOPED_TRACE(data.year);
SCOPED_TRACE(data.month);
EXPECT_TRUE(
!autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
ASCIIToUTF16(data.month),
now));
}
}
TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
SCOPED_TRACE(kValidCreditCardSecurityCode[i]);
EXPECT_TRUE(
autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kValidCreditCardSecurityCode[i])));
}
for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) {
SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]);
EXPECT_FALSE(
autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kInvalidCreditCardSecurityCode[i])));
}
}
TEST(AutofillValidation, IsValidEmailAddress) {
for (size_t i = 0; i < arraysize(kValidEmailAddress); ++i) {
SCOPED_TRACE(kValidEmailAddress[i]);
EXPECT_TRUE(
autofill::IsValidEmailAddress(ASCIIToUTF16(kValidEmailAddress[i])));
}
for (size_t i = 0; i < arraysize(kInvalidEmailAddress); ++i) {
SCOPED_TRACE(kInvalidEmailAddress[i]);
EXPECT_FALSE(
autofill::IsValidEmailAddress(ASCIIToUTF16(kInvalidEmailAddress[i])));
}
}
TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) {
EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard)));
EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard)));
EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard)));
EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard)));
EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0])));
EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0])));
}
} // namespace autofill