- add sources.
[platform/framework/web/crosswalk.git] / src / components / autofill / core / browser / validation_unittest.cc
1 // Copyright 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
5 #include "base/strings/utf_string_conversions.h"
6 #include "base/time/time.h"
7 #include "components/autofill/core/browser/validation.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace autofill {
11 namespace {
12
13 struct ExpirationDate {
14   const char* year;
15   const char* month;
16 };
17
18 struct IntExpirationDate {
19   const int year;
20   const int month;
21 };
22
23 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
24 const char* const kValidNumbers[] = {
25   "378282246310005",
26   "3714 4963 5398 431",
27   "3787-3449-3671-000",
28   "5610591081018250",
29   "3056 9309 0259 04",
30   "3852-0000-0232-37",
31   "6011111111111117",
32   "6011 0009 9013 9424",
33   "3530-1113-3330-0000",
34   "3566002020360505",
35   "5555 5555 5555 4444",
36   "5105-1051-0510-5100",
37   "4111111111111111",
38   "4012 8888 8888 1881",
39   "4222-2222-2222-2",
40   "5019717010103742",
41   "6331101999990016",
42
43   // A UnionPay card that doesn't pass the Luhn checksum
44   "6200000000000000",
45 };
46 const char* const kInvalidNumbers[] = {
47   "4111 1111 112", /* too short */
48   "41111111111111111115", /* too long */
49   "4111-1111-1111-1110", /* wrong Luhn checksum */
50   "3056 9309 0259 04aa", /* non-digit characters */
51 };
52 const char kCurrentDate[]="1 May 2013";
53 const ExpirationDate kValidCreditCardExpirationDate[] = {
54   { "2013", "5" },  // Valid month in current year.
55   { "2014", "1" },  // Any month in next year.
56   { "2014", " 1" },  // Whitespace in month.
57   { " 2014", "1" },  // Whitespace in year.
58 };
59 const IntExpirationDate kValidCreditCardIntExpirationDate[] = {
60   { 2013, 5 },  // Valid month in current year.
61   { 2014, 1 },  // Any month in next year.
62 };
63 const ExpirationDate kInvalidCreditCardExpirationDate[] = {
64   { "2013", "04" },  // Previous month in current year.
65   { "2012", "12" },  // Any month in previous year.
66 };
67 const IntExpirationDate kInvalidCreditCardIntExpirationDate[] = {
68   { 2013, 4 },  // Previous month in current year.
69   { 2012, 12 },  // Any month in previous year.
70 };
71 const char* const kValidCreditCardSecurityCode[] = {
72   "323",  // 3-digit CSC.
73   "3234",  // 4-digit CSC.
74 };
75 const char* const kInvalidCreditCardSecurityCode[] = {
76   "32",  // CSC too short.
77   "12345",  // CSC too long.
78   "asd",  // non-numeric CSC.
79 };
80 const char* const kValidEmailAddress[] = {
81   "user@example",
82   "user@example.com",
83   "user@subdomain.example.com",
84   "user+postfix@example.com",
85 };
86 const char* const kInvalidEmailAddress[] = {
87   "user",
88   "foo.com",
89   "user@",
90   "user@=example.com"
91 };
92 const char kAmericanExpressCard[] = "341111111111111";
93 const char kVisaCard[] = "4111111111111111";
94 const char kAmericanExpressCVC[] = "1234";
95 const char kVisaCVC[] = "123";
96 }  // namespace
97
98 TEST(AutofillValidation, IsValidCreditCardNumber) {
99   for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
100     SCOPED_TRACE(kValidNumbers[i]);
101     EXPECT_TRUE(
102         autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i])));
103   }
104   for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
105     SCOPED_TRACE(kInvalidNumbers[i]);
106     EXPECT_FALSE(
107         autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
108   }
109 }
110
111 TEST(AutofillValidation, IsValidCreditCardExpirationDate)
112 {
113   base::Time now;
114   ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
115
116   for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) {
117     const ExpirationDate& data = kValidCreditCardExpirationDate[i];
118     SCOPED_TRACE(data.year);
119     SCOPED_TRACE(data.month);
120     EXPECT_TRUE(
121         autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
122                                                   ASCIIToUTF16(data.month),
123                                                   now));
124   }
125   for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) {
126     const ExpirationDate& data = kInvalidCreditCardExpirationDate[i];
127     SCOPED_TRACE(data.year);
128     SCOPED_TRACE(data.month);
129     EXPECT_TRUE(
130         !autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
131                                                    ASCIIToUTF16(data.month),
132                                                    now));
133   }
134 }
135
136 TEST(AutofillValidation, IsValidCreditCardIntExpirationDate)
137 {
138   base::Time now;
139   ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
140
141   for (size_t i = 0; i < arraysize(kValidCreditCardIntExpirationDate); ++i) {
142     const IntExpirationDate& data = kValidCreditCardIntExpirationDate[i];
143     SCOPED_TRACE(data.year);
144     SCOPED_TRACE(data.month);
145     EXPECT_TRUE(
146         autofill::IsValidCreditCardExpirationDate(data.year, data.month, now));
147   }
148   for (size_t i = 0; i < arraysize(kInvalidCreditCardIntExpirationDate); ++i) {
149     const IntExpirationDate& data = kInvalidCreditCardIntExpirationDate[i];
150     SCOPED_TRACE(data.year);
151     SCOPED_TRACE(data.month);
152     EXPECT_TRUE(
153         !autofill::IsValidCreditCardExpirationDate(data.year, data.month, now));
154   }
155 }
156 TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
157   for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
158     SCOPED_TRACE(kValidCreditCardSecurityCode[i]);
159     EXPECT_TRUE(
160         autofill::IsValidCreditCardSecurityCode(
161             ASCIIToUTF16(kValidCreditCardSecurityCode[i])));
162   }
163   for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) {
164     SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]);
165     EXPECT_FALSE(
166         autofill::IsValidCreditCardSecurityCode(
167             ASCIIToUTF16(kInvalidCreditCardSecurityCode[i])));
168   }
169 }
170
171 TEST(AutofillValidation, IsValidEmailAddress) {
172   for (size_t i = 0; i < arraysize(kValidEmailAddress); ++i) {
173     SCOPED_TRACE(kValidEmailAddress[i]);
174     EXPECT_TRUE(
175         autofill::IsValidEmailAddress(ASCIIToUTF16(kValidEmailAddress[i])));
176   }
177   for (size_t i = 0; i < arraysize(kInvalidEmailAddress); ++i) {
178     SCOPED_TRACE(kInvalidEmailAddress[i]);
179     EXPECT_FALSE(
180         autofill::IsValidEmailAddress(ASCIIToUTF16(kInvalidEmailAddress[i])));
181   }
182 }
183
184 TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) {
185   EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
186       ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard)));
187   EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
188       ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard)));
189   EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
190       ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard)));
191   EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
192       ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard)));
193   EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode(
194       ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0])));
195   EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode(
196       ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0])));
197 }
198
199 }  // namespace autofill