| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "components/autofill/core/browser/credit_card.h" |
| 10 #include "components/autofill/core/browser/validation.h" | 11 #include "components/autofill/core/browser/validation.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 13 |
| 13 using base::ASCIIToUTF16; | 14 using base::ASCIIToUTF16; |
| 14 | 15 |
| 15 namespace autofill { | 16 namespace autofill { |
| 16 namespace { | 17 namespace { |
| 17 | 18 |
| 18 struct ExpirationDate { | 19 struct ExpirationDate { |
| 19 const char* year; | 20 const char* year; |
| 20 const char* month; | 21 const char* month; |
| 21 }; | 22 }; |
| 22 | 23 |
| 23 struct IntExpirationDate { | 24 struct IntExpirationDate { |
| 24 const int year; | 25 const int year; |
| 25 const int month; | 26 const int month; |
| 26 }; | 27 }; |
| 27 | 28 |
| 29 struct SecurityCodeCardTypePair { |
| 30 const char* security_code; |
| 31 const char* card_type; |
| 32 }; |
| 33 |
| 28 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card
_numbers.htm | 34 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card
_numbers.htm |
| 29 const char* const kValidNumbers[] = { | 35 const char* const kValidNumbers[] = { |
| 30 "378282246310005", | 36 "378282246310005", |
| 31 "3714 4963 5398 431", | 37 "3714 4963 5398 431", |
| 32 "3787-3449-3671-000", | 38 "3787-3449-3671-000", |
| 33 "5610591081018250", | 39 "5610591081018250", |
| 34 "3056 9309 0259 04", | 40 "3056 9309 0259 04", |
| 35 "3852-0000-0232-37", | 41 "3852-0000-0232-37", |
| 36 "6011111111111117", | 42 "6011111111111117", |
| 37 "6011 0009 9013 9424", | 43 "6011 0009 9013 9424", |
| (...skipping 19 matching lines...) Expand all Loading... |
| 57 { 2013, 5 }, // Valid month in current year. | 63 { 2013, 5 }, // Valid month in current year. |
| 58 { 2014, 1 }, // Any month in next year. | 64 { 2014, 1 }, // Any month in next year. |
| 59 { 2014, 12 }, // Edge condition. | 65 { 2014, 12 }, // Edge condition. |
| 60 }; | 66 }; |
| 61 const IntExpirationDate kInvalidCreditCardIntExpirationDate[] = { | 67 const IntExpirationDate kInvalidCreditCardIntExpirationDate[] = { |
| 62 { 2013, 4 }, // Previous month in current year. | 68 { 2013, 4 }, // Previous month in current year. |
| 63 { 2012, 12 }, // Any month in previous year. | 69 { 2012, 12 }, // Any month in previous year. |
| 64 { 2015, 13 }, // Not a real month. | 70 { 2015, 13 }, // Not a real month. |
| 65 { 2015, 0 }, // Zero is legal in the CC class but is not a valid date. | 71 { 2015, 0 }, // Zero is legal in the CC class but is not a valid date. |
| 66 }; | 72 }; |
| 67 const char* const kValidCreditCardSecurityCode[] = { | 73 const SecurityCodeCardTypePair kValidSecurityCodeCardTypePairs[] = { |
| 68 "323", // 3-digit CSC. | 74 { "323", kGenericCard }, // 3-digit CSC. |
| 69 "3234", // 4-digit CSC. | 75 { "3234", kAmericanExpressCard }, // 4-digit CSC. |
| 70 }; | 76 }; |
| 71 const char* const kInvalidCreditCardSecurityCode[] = { | 77 const SecurityCodeCardTypePair kInvalidSecurityCodeCardTypePairs[] = { |
| 72 "32", // CSC too short. | 78 { "32", kGenericCard }, // CSC too short. |
| 73 "12345", // CSC too long. | 79 { "323", kAmericanExpressCard }, // CSC too short. |
| 74 "asd", // non-numeric CSC. | 80 { "3234", kGenericCard }, // CSC too long. |
| 81 { "12345", kAmericanExpressCard }, // CSC too long. |
| 82 { "asd", kGenericCard }, // non-numeric CSC. |
| 75 }; | 83 }; |
| 76 const char* const kValidEmailAddress[] = { | 84 const char* const kValidEmailAddress[] = { |
| 77 "user@example", | 85 "user@example", |
| 78 "user@example.com", | 86 "user@example.com", |
| 79 "user@subdomain.example.com", | 87 "user@subdomain.example.com", |
| 80 "user+postfix@example.com", | 88 "user+postfix@example.com", |
| 81 }; | 89 }; |
| 82 const char* const kInvalidEmailAddress[] = { | 90 const char* const kInvalidEmailAddress[] = { |
| 83 "user", | 91 "user", |
| 84 "foo.com", | 92 "foo.com", |
| 85 "user@", | 93 "user@", |
| 86 "user@=example.com" | 94 "user@=example.com" |
| 87 }; | 95 }; |
| 88 const char kAmericanExpressCard[] = "341111111111111"; | |
| 89 const char kVisaCard[] = "4111111111111111"; | |
| 90 const char kAmericanExpressCVC[] = "1234"; | |
| 91 const char kVisaCVC[] = "123"; | |
| 92 } // namespace | 96 } // namespace |
| 93 | 97 |
| 94 TEST(AutofillValidation, IsValidCreditCardNumber) { | 98 TEST(AutofillValidation, IsValidCreditCardNumber) { |
| 95 for (const char* valid_number : kValidNumbers) { | 99 for (const char* valid_number : kValidNumbers) { |
| 96 SCOPED_TRACE(valid_number); | 100 SCOPED_TRACE(valid_number); |
| 97 EXPECT_TRUE(IsValidCreditCardNumber(ASCIIToUTF16(valid_number))); | 101 EXPECT_TRUE(IsValidCreditCardNumber(ASCIIToUTF16(valid_number))); |
| 98 } | 102 } |
| 99 for (const char* invalid_number : kInvalidNumbers) { | 103 for (const char* invalid_number : kInvalidNumbers) { |
| 100 SCOPED_TRACE(invalid_number); | 104 SCOPED_TRACE(invalid_number); |
| 101 EXPECT_FALSE(IsValidCreditCardNumber(ASCIIToUTF16(invalid_number))); | 105 EXPECT_FALSE(IsValidCreditCardNumber(ASCIIToUTF16(invalid_number))); |
| 102 } | 106 } |
| 103 } | 107 } |
| 104 | 108 |
| 105 TEST(AutofillValidation, IsValidCreditCardIntExpirationDate) { | 109 TEST(AutofillValidation, IsValidCreditCardIntExpirationDate) { |
| 106 base::Time now; | 110 base::Time now; |
| 107 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); | 111 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); |
| 108 | 112 |
| 109 for (const IntExpirationDate& data : kValidCreditCardIntExpirationDate) { | 113 for (const IntExpirationDate& data : kValidCreditCardIntExpirationDate) { |
| 110 SCOPED_TRACE(data.year); | 114 SCOPED_TRACE(data.year); |
| 111 SCOPED_TRACE(data.month); | 115 SCOPED_TRACE(data.month); |
| 112 EXPECT_TRUE(IsValidCreditCardExpirationDate(data.year, data.month, now)); | 116 EXPECT_TRUE(IsValidCreditCardExpirationDate(data.year, data.month, now)); |
| 113 } | 117 } |
| 114 for (const IntExpirationDate& data : kInvalidCreditCardIntExpirationDate) { | 118 for (const IntExpirationDate& data : kInvalidCreditCardIntExpirationDate) { |
| 115 SCOPED_TRACE(data.year); | 119 SCOPED_TRACE(data.year); |
| 116 SCOPED_TRACE(data.month); | 120 SCOPED_TRACE(data.month); |
| 117 EXPECT_TRUE(!IsValidCreditCardExpirationDate(data.year, data.month, now)); | 121 EXPECT_TRUE(!IsValidCreditCardExpirationDate(data.year, data.month, now)); |
| 118 } | 122 } |
| 119 } | 123 } |
| 124 |
| 120 TEST(AutofillValidation, IsValidCreditCardSecurityCode) { | 125 TEST(AutofillValidation, IsValidCreditCardSecurityCode) { |
| 121 for (const char* valid_code : kValidCreditCardSecurityCode) { | 126 for (const auto data : kValidSecurityCodeCardTypePairs) { |
| 122 SCOPED_TRACE(valid_code); | 127 SCOPED_TRACE(data.security_code); |
| 123 EXPECT_TRUE(IsValidCreditCardSecurityCode(ASCIIToUTF16(valid_code))); | 128 SCOPED_TRACE(data.card_type); |
| 129 EXPECT_TRUE(IsValidCreditCardSecurityCode(ASCIIToUTF16(data.security_code), |
| 130 data.card_type)); |
| 124 } | 131 } |
| 125 for (const char* invalid_code : kInvalidCreditCardSecurityCode) { | 132 for (const auto data : kInvalidSecurityCodeCardTypePairs) { |
| 126 SCOPED_TRACE(invalid_code); | 133 SCOPED_TRACE(data.security_code); |
| 127 EXPECT_FALSE(IsValidCreditCardSecurityCode(ASCIIToUTF16(invalid_code))); | 134 SCOPED_TRACE(data.card_type); |
| 135 EXPECT_FALSE(IsValidCreditCardSecurityCode(ASCIIToUTF16(data.security_code), |
| 136 data.card_type)); |
| 128 } | 137 } |
| 129 } | 138 } |
| 130 | 139 |
| 131 TEST(AutofillValidation, IsValidEmailAddress) { | 140 TEST(AutofillValidation, IsValidEmailAddress) { |
| 132 for (const char* valid_email : kValidEmailAddress) { | 141 for (const char* valid_email : kValidEmailAddress) { |
| 133 SCOPED_TRACE(valid_email); | 142 SCOPED_TRACE(valid_email); |
| 134 EXPECT_TRUE(IsValidEmailAddress(ASCIIToUTF16(valid_email))); | 143 EXPECT_TRUE(IsValidEmailAddress(ASCIIToUTF16(valid_email))); |
| 135 } | 144 } |
| 136 for (const char* invalid_email : kInvalidEmailAddress) { | 145 for (const char* invalid_email : kInvalidEmailAddress) { |
| 137 SCOPED_TRACE(invalid_email); | 146 SCOPED_TRACE(invalid_email); |
| 138 EXPECT_FALSE(IsValidEmailAddress(ASCIIToUTF16(invalid_email))); | 147 EXPECT_FALSE(IsValidEmailAddress(ASCIIToUTF16(invalid_email))); |
| 139 } | 148 } |
| 140 } | 149 } |
| 141 | 150 |
| 142 TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) { | |
| 143 EXPECT_TRUE(IsValidCreditCardSecurityCode( | |
| 144 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard))); | |
| 145 EXPECT_TRUE(IsValidCreditCardSecurityCode( | |
| 146 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard))); | |
| 147 EXPECT_FALSE(IsValidCreditCardSecurityCode( | |
| 148 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard))); | |
| 149 EXPECT_FALSE(IsValidCreditCardSecurityCode( | |
| 150 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard))); | |
| 151 EXPECT_TRUE(IsValidCreditCardSecurityCode( | |
| 152 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0]))); | |
| 153 EXPECT_FALSE(IsValidCreditCardSecurityCode( | |
| 154 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0]))); | |
| 155 } | |
| 156 | |
| 157 } // namespace autofill | 151 } // namespace autofill |
| OLD | NEW |