blob: 939917d402fde498aae658b5fb4f795fa4b7723f [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
[email protected]e217c5632013-04-12 19:11:4810namespace autofill {
[email protected]1a04c122013-01-19 03:44:4711namespace {
12
[email protected]dad621b2013-03-19 01:57:1113struct ExpirationDate {
14 const char* year;
15 const char* month;
16};
17
[email protected]1a04c122013-01-19 03:44:4718// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
19const char* const kValidNumbers[] = {
20 "378282246310005",
21 "3714 4963 5398 431",
22 "3787-3449-3671-000",
23 "5610591081018250",
24 "3056 9309 0259 04",
25 "3852-0000-0232-37",
26 "6011111111111117",
27 "6011 0009 9013 9424",
28 "3530-1113-3330-0000",
29 "3566002020360505",
30 "5555 5555 5555 4444",
31 "5105-1051-0510-5100",
32 "4111111111111111",
33 "4012 8888 8888 1881",
34 "4222-2222-2222-2",
35 "5019717010103742",
36 "6331101999990016",
37};
38const char* const kInvalidNumbers[] = {
39 "4111 1111 112", /* too short */
40 "41111111111111111115", /* too long */
41 "4111-1111-1111-1110", /* wrong Luhn checksum */
42 "3056 9309 0259 04aa", /* non-digit characters */
43};
[email protected]dad621b2013-03-19 01:57:1144const char kCurrentDate[]="1 May 2013";
45const ExpirationDate kValidCreditCardExpirationDate[] = {
46 { "2013", "5" }, // Valid month in current year.
47 { "2014", "1" }, // Any month in next year.
48 { "2014", " 1" }, // Whitespace in month.
49 { " 2014", "1" }, // Whitespace in year.
50};
51const ExpirationDate kInvalidCreditCardExpirationDate[] = {
52 { "2013", "04" }, // Previous month in current year.
53 { "2012", "12" }, // Any month in previous year.
54};
[email protected]852c1e1f2013-02-12 05:06:3055const char* const kValidCreditCardSecurityCode[] = {
56 "323", // 3-digit CSC.
57 "3234", // 4-digit CSC.
58};
59const char* const kInvalidCreditCardSecurityCode[] = {
60 "32", // CSC too short.
61 "12345", // CSC too long.
62 "asd", // non-numeric CSC.
63};
[email protected]e2e37f52013-02-22 23:16:1664const char* const kValidEmailAddress[] = {
65 "user@example",
66 "[email protected]",
67 "[email protected]",
68 "[email protected]",
69};
70const char* const kInvalidEmailAddress[] = {
71 "user",
72 "foo.com",
73 "user@",
74 "user@=example.com"
75};
[email protected]e570ec1d2013-03-20 01:41:4676const char kAmericanExpressCard[] = "341111111111111";
77const char kVisaCard[] = "4111111111111111";
78const char kAmericanExpressCVC[] = "1234";
79const char kVisaCVC[] = "123";
[email protected]1a04c122013-01-19 03:44:4780} // namespace
81
82TEST(AutofillValidation, IsValidCreditCardNumber) {
83 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
84 SCOPED_TRACE(kValidNumbers[i]);
85 EXPECT_TRUE(
86 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i])));
87 }
88 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
89 SCOPED_TRACE(kInvalidNumbers[i]);
90 EXPECT_FALSE(
91 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
92 }
93}
[email protected]852c1e1f2013-02-12 05:06:3094
[email protected]dad621b2013-03-19 01:57:1195TEST(AutofillValidation, IsValidCreditCardExpirationDate)
96{
97 base::Time now;
98 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
99
100 for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) {
101 const ExpirationDate data = kValidCreditCardExpirationDate[i];
102 SCOPED_TRACE(data.year);
103 SCOPED_TRACE(data.month);
104 EXPECT_TRUE(
105 autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
106 ASCIIToUTF16(data.month),
107 now));
108 }
109 for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) {
110 const ExpirationDate data = kInvalidCreditCardExpirationDate[i];
111 SCOPED_TRACE(data.year);
112 SCOPED_TRACE(data.month);
113 EXPECT_TRUE(
114 !autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
115 ASCIIToUTF16(data.month),
116 now));
117 }
118}
119
[email protected]852c1e1f2013-02-12 05:06:30120TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
121 for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
122 SCOPED_TRACE(kValidCreditCardSecurityCode[i]);
123 EXPECT_TRUE(
124 autofill::IsValidCreditCardSecurityCode(
125 ASCIIToUTF16(kValidCreditCardSecurityCode[i])));
126 }
127 for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) {
128 SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]);
129 EXPECT_FALSE(
130 autofill::IsValidCreditCardSecurityCode(
131 ASCIIToUTF16(kInvalidCreditCardSecurityCode[i])));
132 }
133}
134
[email protected]e2e37f52013-02-22 23:16:16135TEST(AutofillValidation, IsValidEmailAddress) {
136 for (size_t i = 0; i < arraysize(kValidEmailAddress); ++i) {
137 SCOPED_TRACE(kValidEmailAddress[i]);
138 EXPECT_TRUE(
139 autofill::IsValidEmailAddress(ASCIIToUTF16(kValidEmailAddress[i])));
140 }
141 for (size_t i = 0; i < arraysize(kInvalidEmailAddress); ++i) {
142 SCOPED_TRACE(kInvalidEmailAddress[i]);
143 EXPECT_FALSE(
144 autofill::IsValidEmailAddress(ASCIIToUTF16(kInvalidEmailAddress[i])));
145 }
146}
147
[email protected]e570ec1d2013-03-20 01:41:46148TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) {
149 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
150 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard)));
151 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
152 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard)));
153 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
154 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard)));
155 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
156 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard)));
157 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
158 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0])));
159 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
160 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0])));
161}
[email protected]e217c5632013-04-12 19:11:48162
163} // namespace autofill