blob: b29d91b212e01b566a5e69963ac0b9c874910ed8 [file] [log] [blame]
[email protected]1a04c122013-01-19 03:44:471// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]dad621b2013-03-19 01:57:115#include "base/time.h"
[email protected]1a04c122013-01-19 03:44:476#include "base/utf_string_conversions.h"
[email protected]e4b2fa32013-03-09 22:56:567#include "components/autofill/browser/validation.h"
[email protected]1a04c122013-01-19 03:44:478#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
[email protected]dad621b2013-03-19 01:57:1112struct ExpirationDate {
13 const char* year;
14 const char* month;
15};
16
[email protected]1a04c122013-01-19 03:44:4717// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
18const char* const kValidNumbers[] = {
19 "378282246310005",
20 "3714 4963 5398 431",
21 "3787-3449-3671-000",
22 "5610591081018250",
23 "3056 9309 0259 04",
24 "3852-0000-0232-37",
25 "6011111111111117",
26 "6011 0009 9013 9424",
27 "3530-1113-3330-0000",
28 "3566002020360505",
29 "5555 5555 5555 4444",
30 "5105-1051-0510-5100",
31 "4111111111111111",
32 "4012 8888 8888 1881",
33 "4222-2222-2222-2",
34 "5019717010103742",
35 "6331101999990016",
36};
37const char* const kInvalidNumbers[] = {
38 "4111 1111 112", /* too short */
39 "41111111111111111115", /* too long */
40 "4111-1111-1111-1110", /* wrong Luhn checksum */
41 "3056 9309 0259 04aa", /* non-digit characters */
42};
[email protected]dad621b2013-03-19 01:57:1143const char kCurrentDate[]="1 May 2013";
44const ExpirationDate kValidCreditCardExpirationDate[] = {
45 { "2013", "5" }, // Valid month in current year.
46 { "2014", "1" }, // Any month in next year.
47 { "2014", " 1" }, // Whitespace in month.
48 { " 2014", "1" }, // Whitespace in year.
49};
50const ExpirationDate kInvalidCreditCardExpirationDate[] = {
51 { "2013", "04" }, // Previous month in current year.
52 { "2012", "12" }, // Any month in previous year.
53};
[email protected]852c1e1f2013-02-12 05:06:3054const char* const kValidCreditCardSecurityCode[] = {
55 "323", // 3-digit CSC.
56 "3234", // 4-digit CSC.
57};
58const char* const kInvalidCreditCardSecurityCode[] = {
59 "32", // CSC too short.
60 "12345", // CSC too long.
61 "asd", // non-numeric CSC.
62};
[email protected]e2e37f52013-02-22 23:16:1663const char* const kValidEmailAddress[] = {
64 "user@example",
65 "[email protected]",
66 "[email protected]",
67 "[email protected]",
68};
69const char* const kInvalidEmailAddress[] = {
70 "user",
71 "foo.com",
72 "user@",
73 "user@=example.com"
74};
[email protected]e570ec1d2013-03-20 01:41:4675const char kAmericanExpressCard[] = "341111111111111";
76const char kVisaCard[] = "4111111111111111";
77const char kAmericanExpressCVC[] = "1234";
78const char kVisaCVC[] = "123";
[email protected]1a04c122013-01-19 03:44:4779} // namespace
80
81TEST(AutofillValidation, IsValidCreditCardNumber) {
82 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
83 SCOPED_TRACE(kValidNumbers[i]);
84 EXPECT_TRUE(
85 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i])));
86 }
87 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
88 SCOPED_TRACE(kInvalidNumbers[i]);
89 EXPECT_FALSE(
90 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
91 }
92}
[email protected]852c1e1f2013-02-12 05:06:3093
[email protected]dad621b2013-03-19 01:57:1194TEST(AutofillValidation, IsValidCreditCardExpirationDate)
95{
96 base::Time now;
97 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
98
99 for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) {
100 const ExpirationDate data = kValidCreditCardExpirationDate[i];
101 SCOPED_TRACE(data.year);
102 SCOPED_TRACE(data.month);
103 EXPECT_TRUE(
104 autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
105 ASCIIToUTF16(data.month),
106 now));
107 }
108 for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) {
109 const ExpirationDate data = kInvalidCreditCardExpirationDate[i];
110 SCOPED_TRACE(data.year);
111 SCOPED_TRACE(data.month);
112 EXPECT_TRUE(
113 !autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
114 ASCIIToUTF16(data.month),
115 now));
116 }
117}
118
[email protected]852c1e1f2013-02-12 05:06:30119TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
120 for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
121 SCOPED_TRACE(kValidCreditCardSecurityCode[i]);
122 EXPECT_TRUE(
123 autofill::IsValidCreditCardSecurityCode(
124 ASCIIToUTF16(kValidCreditCardSecurityCode[i])));
125 }
126 for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) {
127 SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]);
128 EXPECT_FALSE(
129 autofill::IsValidCreditCardSecurityCode(
130 ASCIIToUTF16(kInvalidCreditCardSecurityCode[i])));
131 }
132}
133
[email protected]e2e37f52013-02-22 23:16:16134TEST(AutofillValidation, IsValidEmailAddress) {
135 for (size_t i = 0; i < arraysize(kValidEmailAddress); ++i) {
136 SCOPED_TRACE(kValidEmailAddress[i]);
137 EXPECT_TRUE(
138 autofill::IsValidEmailAddress(ASCIIToUTF16(kValidEmailAddress[i])));
139 }
140 for (size_t i = 0; i < arraysize(kInvalidEmailAddress); ++i) {
141 SCOPED_TRACE(kInvalidEmailAddress[i]);
142 EXPECT_FALSE(
143 autofill::IsValidEmailAddress(ASCIIToUTF16(kInvalidEmailAddress[i])));
144 }
145}
146
[email protected]e570ec1d2013-03-20 01:41:46147TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) {
148 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
149 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard)));
150 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
151 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard)));
152 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
153 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard)));
154 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
155 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard)));
156 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
157 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0])));
158 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
159 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0])));
160}