[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 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 |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 5 | #include "base/time.h" |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 6 | #include "base/utf_string_conversions.h" |
[email protected] | e4b2fa3 | 2013-03-09 22:56:56 | [diff] [blame] | 7 | #include "components/autofill/browser/validation.h" |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 8 | #include "testing/gtest/include/gtest/gtest.h" |
| 9 | |
[email protected] | e217c563 | 2013-04-12 19:11:48 | [diff] [blame^] | 10 | namespace autofill { |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 11 | namespace { |
| 12 | |
[email protected] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 13 | struct ExpirationDate { |
| 14 | const char* year; |
| 15 | const char* month; |
| 16 | }; |
| 17 | |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 18 | // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm |
| 19 | const 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 | }; |
| 38 | const 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] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 44 | const char kCurrentDate[]="1 May 2013"; |
| 45 | const 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 | }; |
| 51 | const ExpirationDate kInvalidCreditCardExpirationDate[] = { |
| 52 | { "2013", "04" }, // Previous month in current year. |
| 53 | { "2012", "12" }, // Any month in previous year. |
| 54 | }; |
[email protected] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 55 | const char* const kValidCreditCardSecurityCode[] = { |
| 56 | "323", // 3-digit CSC. |
| 57 | "3234", // 4-digit CSC. |
| 58 | }; |
| 59 | const char* const kInvalidCreditCardSecurityCode[] = { |
| 60 | "32", // CSC too short. |
| 61 | "12345", // CSC too long. |
| 62 | "asd", // non-numeric CSC. |
| 63 | }; |
[email protected] | e2e37f5 | 2013-02-22 23:16:16 | [diff] [blame] | 64 | const char* const kValidEmailAddress[] = { |
| 65 | "user@example", |
| 66 | "[email protected]", |
| 67 | "[email protected]", |
| 68 | "[email protected]", |
| 69 | }; |
| 70 | const char* const kInvalidEmailAddress[] = { |
| 71 | "user", |
| 72 | "foo.com", |
| 73 | "user@", |
| 74 | "user@=example.com" |
| 75 | }; |
[email protected] | e570ec1d | 2013-03-20 01:41:46 | [diff] [blame] | 76 | const char kAmericanExpressCard[] = "341111111111111"; |
| 77 | const char kVisaCard[] = "4111111111111111"; |
| 78 | const char kAmericanExpressCVC[] = "1234"; |
| 79 | const char kVisaCVC[] = "123"; |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 80 | } // namespace |
| 81 | |
| 82 | TEST(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] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 94 | |
[email protected] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 95 | TEST(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] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 120 | TEST(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] | e2e37f5 | 2013-02-22 23:16:16 | [diff] [blame] | 135 | TEST(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] | e570ec1d | 2013-03-20 01:41:46 | [diff] [blame] | 148 | TEST(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] | e217c563 | 2013-04-12 19:11:48 | [diff] [blame^] | 162 | |
| 163 | } // namespace autofill |