OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include "base/time.h" |
5 #include "base/utf_string_conversions.h" | 6 #include "base/utf_string_conversions.h" |
6 #include "chrome/browser/autofill/validation.h" | 7 #include "chrome/browser/autofill/validation.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
8 | 9 |
9 namespace { | 10 namespace { |
10 | 11 |
| 12 // Test data for expiration date validation. |
| 13 struct DateTestData { |
| 14 const char* const value; // Expiration date. |
| 15 int digits; // Number of expected digits for expiration year. |
| 16 }; |
| 17 |
11 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card
_numbers.htm | 18 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card
_numbers.htm |
12 const char* const kValidNumbers[] = { | 19 const char* const kValidNumbers[] = { |
13 "378282246310005", | 20 "378282246310005", |
14 "3714 4963 5398 431", | 21 "3714 4963 5398 431", |
15 "3787-3449-3671-000", | 22 "3787-3449-3671-000", |
16 "5610591081018250", | 23 "5610591081018250", |
17 "3056 9309 0259 04", | 24 "3056 9309 0259 04", |
18 "3852-0000-0232-37", | 25 "3852-0000-0232-37", |
19 "6011111111111117", | 26 "6011111111111117", |
20 "6011 0009 9013 9424", | 27 "6011 0009 9013 9424", |
21 "3530-1113-3330-0000", | 28 "3530-1113-3330-0000", |
22 "3566002020360505", | 29 "3566002020360505", |
23 "5555 5555 5555 4444", | 30 "5555 5555 5555 4444", |
24 "5105-1051-0510-5100", | 31 "5105-1051-0510-5100", |
25 "4111111111111111", | 32 "4111111111111111", |
26 "4012 8888 8888 1881", | 33 "4012 8888 8888 1881", |
27 "4222-2222-2222-2", | 34 "4222-2222-2222-2", |
28 "5019717010103742", | 35 "5019717010103742", |
29 "6331101999990016", | 36 "6331101999990016", |
30 }; | 37 }; |
31 const char* const kInvalidNumbers[] = { | 38 const char* const kInvalidNumbers[] = { |
32 "4111 1111 112", /* too short */ | 39 "4111 1111 112", /* too short */ |
33 "41111111111111111115", /* too long */ | 40 "41111111111111111115", /* too long */ |
34 "4111-1111-1111-1110", /* wrong Luhn checksum */ | 41 "4111-1111-1111-1110", /* wrong Luhn checksum */ |
35 "3056 9309 0259 04aa", /* non-digit characters */ | 42 "3056 9309 0259 04aa", /* non-digit characters */ |
36 }; | 43 }; |
37 | 44 const char kCurrentDate[]="1 May 2013"; |
| 45 DateTestData kValidCCYears[] = { |
| 46 { "13", 2 }, // Current year. |
| 47 { "2013", 4 }, // Current year. |
| 48 { "23", 2 }, // Future year. |
| 49 { "2023", 4 }, // Future year. |
| 50 }; |
| 51 DateTestData kInvalidCCYears[] = { |
| 52 { "12", 2 }, // Past year. |
| 53 { "2012", 4 }, // Past year. |
| 54 { "1812", 4 }, // Past year. |
| 55 { "rr", 2 }, // Invalid characters. |
| 56 { "2r", 2 }, // Invalid characters. |
| 57 { "rrrr", 4 }, // Invalid characters. |
| 58 { "2rrr", 4 }, // Invalid characters. |
| 59 { "3", 2 }, // string too short. |
| 60 { "333", 4 }, // string too short. |
| 61 { "333", 2 }, // string too long. |
| 62 { "33333", 4 }, // string too long. |
| 63 }; |
| 64 DateTestData kValidCCDates[] = { |
| 65 { "05/13", 2 }, // Current month & year. |
| 66 { "05/2013", 4 }, // Current month & year. |
| 67 { "13-05", 2 }, // Current month & year. |
| 68 { "2013-05", 4 }, // Current month & year. |
| 69 { "01/14", 2 }, // Next month & year. |
| 70 { "01/2014", 4 }, // Next month & year. |
| 71 { "14-01", 2 }, // Next month & year. |
| 72 { "2014-01", 4 }, // Next month & year. |
| 73 }; |
| 74 DateTestData kInvalidCCDates[] = { |
| 75 { "04/13", 2 }, // Past month. |
| 76 { "04/2013", 4 }, // Past month. |
| 77 { "13-04", 2 }, // Past month. |
| 78 { "2013-04", 4 }, // Past month. |
| 79 { "12/12", 2 }, // Past month. |
| 80 { "12/2012", 4 }, // Past year. |
| 81 { "12-12", 2 }, // Past year. |
| 82 { "2012-12", 4 }, // Past year. |
| 83 { "1/14", 2 }, // Month too short. |
| 84 { "1/2014", 4 }, // Month too short. |
| 85 { "14-1", 2 }, // Month too short. |
| 86 { "2014-1", 4 }, // Month too short. |
| 87 { "111/14", 2 }, // Month too long. |
| 88 { "111/2014", 4 }, // Month too long. |
| 89 { "14-111", 2 }, // Month too long. |
| 90 { "2014-111", 4 }, // Month too long. |
| 91 { "12/133", 2 }, // Year too long. |
| 92 { "12/20133", 4 }, // Year too long. |
| 93 { "133-12", 2 }, // Year too long. |
| 94 { "20133-12", 4 }, // Year too long. |
| 95 { "12/1a", 2 }, // Invalid character (month). |
| 96 { "12/20a3", 4 }, // Invalid character (month). |
| 97 { "13-1a", 2 }, // Invalid character (month). |
| 98 { "2013-1a", 4 }, // Invalid character (month). |
| 99 { "12/a3", 2 }, // Invalid character (year). |
| 100 { "12/2a13", 4 }, // Invalid character (year). |
| 101 { "a3-12", 2 }, // Invalid character (year). |
| 102 { "2a13-12", 4 }, // Invalid character (year). |
| 103 { "12+12", 2 }, // Invalid separator. |
| 104 { "12+2012", 4 }, // Invalid separator. |
| 105 { "2012+12", 4 }, // Invalid separator. |
| 106 }; |
| 107 const char* const kValidCSC[] = { |
| 108 "323", // 3-digit CSC. |
| 109 "3234", // 4-digit CSC. |
| 110 }; |
| 111 const char* const kInvalidCSC[] = { |
| 112 "32", // CSC too short. |
| 113 "12345", // CSC too long. |
| 114 "asd", // non-numeric CSC. |
| 115 }; |
38 } // namespace | 116 } // namespace |
39 | 117 |
40 TEST(AutofillValidation, IsValidCreditCardNumber) { | 118 TEST(AutofillValidation, IsValidCreditCardNumber) { |
41 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) { | 119 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) { |
42 SCOPED_TRACE(kValidNumbers[i]); | 120 SCOPED_TRACE(kValidNumbers[i]); |
43 EXPECT_TRUE( | 121 EXPECT_TRUE( |
44 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i]))); | 122 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i]))); |
45 } | 123 } |
46 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) { | 124 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) { |
47 SCOPED_TRACE(kInvalidNumbers[i]); | 125 SCOPED_TRACE(kInvalidNumbers[i]); |
48 EXPECT_FALSE( | 126 EXPECT_FALSE( |
49 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i]))); | 127 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i]))); |
50 } | 128 } |
51 } | 129 } |
| 130 |
| 131 TEST(AutofillValidation, IsValidCreditCardExpirationYear) |
| 132 { |
| 133 base::Time now; |
| 134 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); |
| 135 |
| 136 for (size_t i = 0; i < arraysize(kValidCCYears); ++i) { |
| 137 const DateTestData data = kValidCCYears[i]; |
| 138 SCOPED_TRACE(data.value); |
| 139 EXPECT_TRUE( |
| 140 autofill::IsValidCreditCardExpirationYear( |
| 141 ASCIIToUTF16(data.value), data.digits, now)); |
| 142 } |
| 143 for (size_t i = 0; i < arraysize(kInvalidCCYears); ++i) { |
| 144 const DateTestData data = kInvalidCCYears[i]; |
| 145 SCOPED_TRACE(data.value); |
| 146 EXPECT_FALSE( |
| 147 autofill::IsValidCreditCardExpirationYear( |
| 148 ASCIIToUTF16(data.value), data.digits, now)); |
| 149 } |
| 150 } |
| 151 |
| 152 TEST(AutofillValidation, IsValidCreditCardExpirationDate) |
| 153 { |
| 154 base::Time now; |
| 155 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); |
| 156 |
| 157 for (size_t i = 0; i < arraysize(kValidCCDates); ++i) { |
| 158 const DateTestData data = kValidCCDates[i]; |
| 159 SCOPED_TRACE(data.value); |
| 160 EXPECT_TRUE( |
| 161 autofill::IsValidCreditCardExpirationDate( |
| 162 ASCIIToUTF16(data.value), data.digits, now)); |
| 163 } |
| 164 for (size_t i = 0; i < arraysize(kInvalidCCDates); ++i) { |
| 165 const DateTestData data = kInvalidCCDates[i]; |
| 166 SCOPED_TRACE(data.value); |
| 167 EXPECT_FALSE( |
| 168 autofill::IsValidCreditCardExpirationDate( |
| 169 ASCIIToUTF16(data.value), data.digits, now)); |
| 170 } |
| 171 } |
| 172 |
| 173 TEST(AutofillValidation, IsValidCreditCardCSC) { |
| 174 for (size_t i = 0; i < arraysize(kValidCSC); ++i) { |
| 175 SCOPED_TRACE(kValidCSC[i]); |
| 176 EXPECT_TRUE( |
| 177 autofill::IsValidCreditCardCSC(ASCIIToUTF16(kValidCSC[i]))); |
| 178 } |
| 179 for (size_t i = 0; i < arraysize(kInvalidCSC); ++i) { |
| 180 SCOPED_TRACE(kInvalidCSC[i]); |
| 181 EXPECT_FALSE( |
| 182 autofill::IsValidCreditCardCSC(ASCIIToUTF16(kInvalidCSC[i]))); |
| 183 } |
| 184 } |
| 185 |
OLD | NEW |