validation_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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 10namespace autofill { 11namespace { 12 13struct ExpirationDate { 14 const char* year; 15 const char* month; 16}; 17 18struct 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 24const 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}; 46const 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}; 52const char kCurrentDate[]="1 May 2013"; 53const 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}; 59const IntExpirationDate kValidCreditCardIntExpirationDate[] = { 60 { 2013, 5 }, // Valid month in current year. 61 { 2014, 1 }, // Any month in next year. 62}; 63const ExpirationDate kInvalidCreditCardExpirationDate[] = { 64 { "2013", "04" }, // Previous month in current year. 65 { "2012", "12" }, // Any month in previous year. 66}; 67const IntExpirationDate kInvalidCreditCardIntExpirationDate[] = { 68 { 2013, 4 }, // Previous month in current year. 69 { 2012, 12 }, // Any month in previous year. 70}; 71const char* const kValidCreditCardSecurityCode[] = { 72 "323", // 3-digit CSC. 73 "3234", // 4-digit CSC. 74}; 75const char* const kInvalidCreditCardSecurityCode[] = { 76 "32", // CSC too short. 77 "12345", // CSC too long. 78 "asd", // non-numeric CSC. 79}; 80const char* const kValidEmailAddress[] = { 81 "user@example", 82 "user@example.com", 83 "user@subdomain.example.com", 84 "user+postfix@example.com", 85}; 86const char* const kInvalidEmailAddress[] = { 87 "user", 88 "foo.com", 89 "user@", 90 "user@=example.com" 91}; 92const char kAmericanExpressCard[] = "341111111111111"; 93const char kVisaCard[] = "4111111111111111"; 94const char kAmericanExpressCVC[] = "1234"; 95const char kVisaCVC[] = "123"; 96} // namespace 97 98TEST(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 111TEST(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 136TEST(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} 156TEST(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 171TEST(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 184TEST(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 200