[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 | |
| 10 | namespace { |
| 11 | |
[email protected] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 12 | struct ExpirationDate { |
| 13 | const char* year; |
| 14 | const char* month; |
| 15 | }; |
| 16 | |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 17 | // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm |
| 18 | const 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 | }; |
| 37 | const 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] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 43 | const char kCurrentDate[]="1 May 2013"; |
| 44 | const 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 | }; |
| 50 | const ExpirationDate kInvalidCreditCardExpirationDate[] = { |
| 51 | { "2013", "04" }, // Previous month in current year. |
| 52 | { "2012", "12" }, // Any month in previous year. |
| 53 | }; |
[email protected] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 54 | const char* const kValidCreditCardSecurityCode[] = { |
| 55 | "323", // 3-digit CSC. |
| 56 | "3234", // 4-digit CSC. |
| 57 | }; |
| 58 | const char* const kInvalidCreditCardSecurityCode[] = { |
| 59 | "32", // CSC too short. |
| 60 | "12345", // CSC too long. |
| 61 | "asd", // non-numeric CSC. |
| 62 | }; |
[email protected] | e2e37f5 | 2013-02-22 23:16:16 | [diff] [blame] | 63 | const char* const kValidEmailAddress[] = { |
| 64 | "user@example", |
| 65 | "[email protected]", |
| 66 | "[email protected]", |
| 67 | "[email protected]", |
| 68 | }; |
| 69 | const char* const kInvalidEmailAddress[] = { |
| 70 | "user", |
| 71 | "foo.com", |
| 72 | "user@", |
| 73 | "user@=example.com" |
| 74 | }; |
[email protected] | e570ec1d | 2013-03-20 01:41:46 | [diff] [blame^] | 75 | const char kAmericanExpressCard[] = "341111111111111"; |
| 76 | const char kVisaCard[] = "4111111111111111"; |
| 77 | const char kAmericanExpressCVC[] = "1234"; |
| 78 | const char kVisaCVC[] = "123"; |
[email protected] | 1a04c12 | 2013-01-19 03:44:47 | [diff] [blame] | 79 | } // namespace |
| 80 | |
| 81 | TEST(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] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 93 | |
[email protected] | dad621b | 2013-03-19 01:57:11 | [diff] [blame] | 94 | TEST(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] | 852c1e1f | 2013-02-12 05:06:30 | [diff] [blame] | 119 | TEST(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] | e2e37f5 | 2013-02-22 23:16:16 | [diff] [blame] | 134 | TEST(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] | e570ec1d | 2013-03-20 01:41:46 | [diff] [blame^] | 147 | TEST(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 | } |