validation_unittest.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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}; 43const char* const kInvalidNumbers[] = { 44 "4111 1111 112", /* too short */ 45 "41111111111111111115", /* too long */ 46 "4111-1111-1111-1110", /* wrong Luhn checksum */ 47 "3056 9309 0259 04aa", /* non-digit characters */ 48}; 49const char kCurrentDate[]="1 May 2013"; 50const ExpirationDate kValidCreditCardExpirationDate[] = { 51 { "2013", "5" }, // Valid month in current year. 52 { "2014", "1" }, // Any month in next year. 53 { "2014", " 1" }, // Whitespace in month. 54 { " 2014", "1" }, // Whitespace in year. 55}; 56const IntExpirationDate kValidCreditCardIntExpirationDate[] = { 57 { 2013, 5 }, // Valid month in current year. 58 { 2014, 1 }, // Any month in next year. 59}; 60const ExpirationDate kInvalidCreditCardExpirationDate[] = { 61 { "2013", "04" }, // Previous month in current year. 62 { "2012", "12" }, // Any month in previous year. 63}; 64const IntExpirationDate kInvalidCreditCardIntExpirationDate[] = { 65 { 2013, 4 }, // Previous month in current year. 66 { 2012, 12 }, // Any month in previous year. 67}; 68const char* const kValidCreditCardSecurityCode[] = { 69 "323", // 3-digit CSC. 70 "3234", // 4-digit CSC. 71}; 72const char* const kInvalidCreditCardSecurityCode[] = { 73 "32", // CSC too short. 74 "12345", // CSC too long. 75 "asd", // non-numeric CSC. 76}; 77const char* const kValidEmailAddress[] = { 78 "user@example", 79 "user@example.com", 80 "user@subdomain.example.com", 81 "user+postfix@example.com", 82}; 83const char* const kInvalidEmailAddress[] = { 84 "user", 85 "foo.com", 86 "user@", 87 "user@=example.com" 88}; 89const char kAmericanExpressCard[] = "341111111111111"; 90const char kVisaCard[] = "4111111111111111"; 91const char kAmericanExpressCVC[] = "1234"; 92const char kVisaCVC[] = "123"; 93} // namespace 94 95TEST(AutofillValidation, IsValidCreditCardNumber) { 96 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) { 97 SCOPED_TRACE(kValidNumbers[i]); 98 EXPECT_TRUE( 99 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i]))); 100 } 101 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) { 102 SCOPED_TRACE(kInvalidNumbers[i]); 103 EXPECT_FALSE( 104 autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i]))); 105 } 106} 107 108TEST(AutofillValidation, IsValidCreditCardExpirationDate) 109{ 110 base::Time now; 111 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); 112 113 for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) { 114 const ExpirationDate& data = kValidCreditCardExpirationDate[i]; 115 SCOPED_TRACE(data.year); 116 SCOPED_TRACE(data.month); 117 EXPECT_TRUE( 118 autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year), 119 ASCIIToUTF16(data.month), 120 now)); 121 } 122 for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) { 123 const ExpirationDate& data = kInvalidCreditCardExpirationDate[i]; 124 SCOPED_TRACE(data.year); 125 SCOPED_TRACE(data.month); 126 EXPECT_TRUE( 127 !autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year), 128 ASCIIToUTF16(data.month), 129 now)); 130 } 131} 132 133TEST(AutofillValidation, IsValidCreditCardIntExpirationDate) 134{ 135 base::Time now; 136 ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now)); 137 138 for (size_t i = 0; i < arraysize(kValidCreditCardIntExpirationDate); ++i) { 139 const IntExpirationDate& data = kValidCreditCardIntExpirationDate[i]; 140 SCOPED_TRACE(data.year); 141 SCOPED_TRACE(data.month); 142 EXPECT_TRUE( 143 autofill::IsValidCreditCardExpirationDate(data.year, data.month, now)); 144 } 145 for (size_t i = 0; i < arraysize(kInvalidCreditCardIntExpirationDate); ++i) { 146 const IntExpirationDate& data = kInvalidCreditCardIntExpirationDate[i]; 147 SCOPED_TRACE(data.year); 148 SCOPED_TRACE(data.month); 149 EXPECT_TRUE( 150 !autofill::IsValidCreditCardExpirationDate(data.year, data.month, now)); 151 } 152} 153TEST(AutofillValidation, IsValidCreditCardSecurityCode) { 154 for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) { 155 SCOPED_TRACE(kValidCreditCardSecurityCode[i]); 156 EXPECT_TRUE( 157 autofill::IsValidCreditCardSecurityCode( 158 ASCIIToUTF16(kValidCreditCardSecurityCode[i]))); 159 } 160 for (size_t i = 0; i < arraysize(kInvalidCreditCardSecurityCode); ++i) { 161 SCOPED_TRACE(kInvalidCreditCardSecurityCode[i]); 162 EXPECT_FALSE( 163 autofill::IsValidCreditCardSecurityCode( 164 ASCIIToUTF16(kInvalidCreditCardSecurityCode[i]))); 165 } 166} 167 168TEST(AutofillValidation, IsValidEmailAddress) { 169 for (size_t i = 0; i < arraysize(kValidEmailAddress); ++i) { 170 SCOPED_TRACE(kValidEmailAddress[i]); 171 EXPECT_TRUE( 172 autofill::IsValidEmailAddress(ASCIIToUTF16(kValidEmailAddress[i]))); 173 } 174 for (size_t i = 0; i < arraysize(kInvalidEmailAddress); ++i) { 175 SCOPED_TRACE(kInvalidEmailAddress[i]); 176 EXPECT_FALSE( 177 autofill::IsValidEmailAddress(ASCIIToUTF16(kInvalidEmailAddress[i]))); 178 } 179} 180 181TEST(AutofillValidation, IsValidCreditCardSecurityCodeWithNumber) { 182 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode( 183 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kAmericanExpressCard))); 184 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode( 185 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kVisaCard))); 186 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode( 187 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kAmericanExpressCard))); 188 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode( 189 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kVisaCard))); 190 EXPECT_TRUE(autofill::IsValidCreditCardSecurityCode( 191 ASCIIToUTF16(kVisaCVC), ASCIIToUTF16(kInvalidNumbers[0]))); 192 EXPECT_FALSE(autofill::IsValidCreditCardSecurityCode( 193 ASCIIToUTF16(kAmericanExpressCVC), ASCIIToUTF16(kInvalidNumbers[0]))); 194} 195 196} // namespace autofill 197