Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: components/autofill/core/browser/validation_unittest.cc

Issue 2611863002: Refactors cvc and expiration date validation in CC upload logic as well as unmask prompt. (Closed)
Patch Set: Addressed comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/autofill/core/browser/validation.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
OLDNEW
« no previous file with comments | « components/autofill/core/browser/validation.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698