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

Side by Side Diff: chrome/browser/autofill/credit_card_unittest.cc

Issue 12434004: Move remaining Autofill code to //components/autofill. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix long lines Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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/basictypes.h"
6 #include "base/utf_string_conversions.h"
7 #include "chrome/browser/autofill/autofill_common_test.h"
8 #include "chrome/browser/autofill/credit_card.h"
9 #include "components/autofill/common/form_field_data.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13
14 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card _numbers.htm
15 const char* const kValidNumbers[] = {
16 "378282246310005",
17 "3714 4963 5398 431",
18 "3787-3449-3671-000",
19 "5610591081018250",
20 "3056 9309 0259 04",
21 "3852-0000-0232-37",
22 "6011111111111117",
23 "6011 0009 9013 9424",
24 "3530-1113-3330-0000",
25 "3566002020360505",
26 "5555 5555 5555 4444",
27 "5105-1051-0510-5100",
28 "4111111111111111",
29 "4012 8888 8888 1881",
30 "4222-2222-2222-2",
31 "5019717010103742",
32 "6331101999990016",
33 };
34 const char* const kInvalidNumbers[] = {
35 "4111 1111 112", /* too short */
36 "41111111111111111115", /* too long */
37 "4111-1111-1111-1110", /* wrong Luhn checksum */
38 "3056 9309 0259 04aa", /* non-digit characters */
39 };
40
41 } // namespace
42
43 // Tests credit card summary string generation. This test simulates a variety
44 // of different possible summary strings. Variations occur based on the
45 // existence of credit card number, month, and year fields.
46 TEST(CreditCardTest, PreviewSummaryAndObfuscatedNumberStrings) {
47 // Case 0: empty credit card.
48 CreditCard credit_card0;
49 string16 summary0 = credit_card0.Label();
50 EXPECT_EQ(string16(), summary0);
51 string16 obfuscated0 = credit_card0.ObfuscatedNumber();
52 EXPECT_EQ(string16(), obfuscated0);
53
54 // Case 00: Empty credit card with empty strings.
55 CreditCard credit_card00;
56 autofill_test::SetCreditCardInfo(&credit_card00,
57 "John Dillinger", "", "", "");
58 string16 summary00 = credit_card00.Label();
59 EXPECT_EQ(string16(ASCIIToUTF16("John Dillinger")), summary00);
60 string16 obfuscated00 = credit_card00.ObfuscatedNumber();
61 EXPECT_EQ(string16(), obfuscated00);
62
63 // Case 1: No credit card number.
64 CreditCard credit_card1;
65 autofill_test::SetCreditCardInfo(&credit_card1,
66 "John Dillinger", "", "01", "2010");
67 string16 summary1 = credit_card1.Label();
68 EXPECT_EQ(string16(ASCIIToUTF16("John Dillinger")), summary1);
69 string16 obfuscated1 = credit_card1.ObfuscatedNumber();
70 EXPECT_EQ(string16(), obfuscated1);
71
72 // Case 2: No month.
73 CreditCard credit_card2;
74 autofill_test::SetCreditCardInfo(&credit_card2,
75 "John Dillinger", "5105 1051 0510 5100", "", "2010");
76 string16 summary2 = credit_card2.Label();
77 EXPECT_EQ(ASCIIToUTF16("************5100"), summary2);
78 string16 obfuscated2 = credit_card2.ObfuscatedNumber();
79 EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated2);
80
81 // Case 3: No year.
82 CreditCard credit_card3;
83 autofill_test::SetCreditCardInfo(&credit_card3,
84 "John Dillinger", "5105 1051 0510 5100", "01", "");
85 string16 summary3 = credit_card3.Label();
86 EXPECT_EQ(ASCIIToUTF16("************5100"), summary3);
87 string16 obfuscated3 = credit_card3.ObfuscatedNumber();
88 EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated3);
89
90 // Case 4: Have everything.
91 CreditCard credit_card4;
92 autofill_test::SetCreditCardInfo(&credit_card4,
93 "John Dillinger", "5105 1051 0510 5100", "01", "2010");
94 string16 summary4 = credit_card4.Label();
95 EXPECT_EQ(ASCIIToUTF16("************5100, Exp: 01/2010"), summary4);
96 string16 obfuscated4 = credit_card4.ObfuscatedNumber();
97 EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated4);
98
99 // Case 5: Very long credit card
100 CreditCard credit_card5;
101 autofill_test::SetCreditCardInfo(&credit_card5,
102 "John Dillinger",
103 "0123456789 0123456789 0123456789 5105 1051 0510 5100", "01", "2010");
104 string16 summary5 = credit_card5.Label();
105 EXPECT_EQ(ASCIIToUTF16("********************5100, Exp: 01/2010"), summary5);
106 string16 obfuscated5 = credit_card5.ObfuscatedNumber();
107 EXPECT_EQ(ASCIIToUTF16("********************5100"), obfuscated5);
108 }
109
110 TEST(CreditCardTest, AssignmentOperator) {
111 CreditCard a, b;
112
113 // Result of assignment should be logically equal to the original profile.
114 autofill_test::SetCreditCardInfo(&a, "John Dillinger",
115 "123456789012", "01", "2010");
116 b = a;
117 EXPECT_TRUE(a == b);
118
119 // Assignment to self should not change the profile value.
120 a = a;
121 EXPECT_TRUE(a == b);
122 }
123
124 TEST(CreditCardTest, IsComplete) {
125 CreditCard card;
126 EXPECT_FALSE(card.IsComplete());
127 card.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Wally T. Walrus"));
128 EXPECT_FALSE(card.IsComplete());
129 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
130 EXPECT_FALSE(card.IsComplete());
131 card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2014"));
132
133 for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
134 SCOPED_TRACE(kValidNumbers[i]);
135 card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16(kValidNumbers[i]));
136 EXPECT_TRUE(card.IsComplete());
137 }
138 for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
139 SCOPED_TRACE(kInvalidNumbers[i]);
140 card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16(kInvalidNumbers[i]));
141 EXPECT_FALSE(card.IsComplete());
142 }
143 }
144
145 TEST(CreditCardTest, InvalidMastercardNumber) {
146 CreditCard card;
147
148 autofill_test::SetCreditCardInfo(&card, "Baby Face Nelson",
149 "5200000000000004", "01", "2010");
150 EXPECT_EQ("genericCC", card.type());
151 }
152
153 // Verify that we preserve exactly what the user typed for credit card numbers.
154 TEST(CreditCardTest, SetRawInfoCreditCardNumber) {
155 CreditCard card;
156
157 autofill_test::SetCreditCardInfo(&card, "Bob Dylan",
158 "4321-5432-6543-xxxx", "07", "2013");
159 EXPECT_EQ(ASCIIToUTF16("4321-5432-6543-xxxx"),
160 card.GetRawInfo(CREDIT_CARD_NUMBER));
161 }
162
163 // Verify that we can handle both numeric and named months.
164 TEST(CreditCardTest, SetExpirationMonth) {
165 CreditCard card;
166
167 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("05"));
168 EXPECT_EQ(ASCIIToUTF16("05"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
169
170 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("7"));
171 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
172
173 // This should fail, and preserve the previous value.
174 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"));
175 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
176
177 card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"), "en-US");
178 EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
179
180 card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("Apr"), "en-US");
181 EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
182 }
183
184 TEST(CreditCardTest, CreditCardType) {
185 CreditCard card;
186
187 // The card type cannot be set directly.
188 card.SetRawInfo(CREDIT_CARD_TYPE, ASCIIToUTF16("Visa"));
189 EXPECT_EQ(string16(), card.GetRawInfo(CREDIT_CARD_TYPE));
190
191 // Setting the number should implicitly set the type.
192 card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111 1111 1111 1111"));
193 EXPECT_EQ(ASCIIToUTF16("Visa"), card.GetRawInfo(CREDIT_CARD_TYPE));
194 }
195
196 TEST(CreditCardTest, CreditCardVerificationCode) {
197 CreditCard card;
198
199 // The verification code cannot be set, as Chrome does not store this data.
200 card.SetRawInfo(CREDIT_CARD_VERIFICATION_CODE, ASCIIToUTF16("999"));
201 EXPECT_EQ(string16(), card.GetRawInfo(CREDIT_CARD_VERIFICATION_CODE));
202 }
203
204
205 TEST(CreditCardTest, CreditCardMonthExact) {
206 const char* const kMonthsNumeric[] = {
207 "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12",
208 };
209 std::vector<string16> options(arraysize(kMonthsNumeric));
210 for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) {
211 options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
212 }
213
214 FormFieldData field;
215 field.form_control_type = "select-one";
216 field.option_values = options;
217 field.option_contents = options;
218
219 CreditCard credit_card;
220 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
221 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, &field);
222 EXPECT_EQ(ASCIIToUTF16("01"), field.value);
223 }
224
225 TEST(CreditCardTest, CreditCardMonthAbbreviated) {
226 const char* const kMonthsAbbreviated[] = {
227 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
228 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
229 };
230 std::vector<string16> options(arraysize(kMonthsAbbreviated));
231 for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i) {
232 options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]);
233 }
234
235 FormFieldData field;
236 field.form_control_type = "select-one";
237 field.option_values = options;
238 field.option_contents = options;
239
240 CreditCard credit_card;
241 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
242 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, &field);
243 EXPECT_EQ(ASCIIToUTF16("Jan"), field.value);
244 }
245
246 TEST(CreditCardTest, CreditCardMonthFull) {
247 const char* const kMonthsFull[] = {
248 "January", "February", "March", "April", "May", "June",
249 "July", "August", "September", "October", "November", "December",
250 };
251 std::vector<string16> options(arraysize(kMonthsFull));
252 for (size_t i = 0; i < arraysize(kMonthsFull); ++i) {
253 options[i] = ASCIIToUTF16(kMonthsFull[i]);
254 }
255
256 FormFieldData field;
257 field.form_control_type = "select-one";
258 field.option_values = options;
259 field.option_contents = options;
260
261 CreditCard credit_card;
262 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
263 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, &field);
264 EXPECT_EQ(ASCIIToUTF16("January"), field.value);
265 }
266
267 TEST(CreditCardTest, CreditCardMonthNumeric) {
268 const char* const kMonthsNumeric[] = {
269 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
270 };
271 std::vector<string16> options(arraysize(kMonthsNumeric));
272 for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) {
273 options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
274 }
275
276 FormFieldData field;
277 field.form_control_type = "select-one";
278 field.option_values = options;
279 field.option_contents = options;
280
281 CreditCard credit_card;
282 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
283 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, &field);
284 EXPECT_EQ(ASCIIToUTF16("1"), field.value);
285 }
286
287 TEST(CreditCardTest, CreditCardTwoDigitYear) {
288 const char* const kYears[] = {
289 "12", "13", "14", "15", "16", "17", "18", "19"
290 };
291 std::vector<string16> options(arraysize(kYears));
292 for (size_t i = 0; i < arraysize(kYears); ++i) {
293 options[i] = ASCIIToUTF16(kYears[i]);
294 }
295
296 FormFieldData field;
297 field.form_control_type = "select-one";
298 field.option_values = options;
299 field.option_contents = options;
300
301 CreditCard credit_card;
302 credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2017"));
303 credit_card.FillSelectControl(CREDIT_CARD_EXP_4_DIGIT_YEAR, &field);
304 EXPECT_EQ(ASCIIToUTF16("17"), field.value);
305 }
306
307 TEST(CreditCardTest, CreditCardTypeSelectControl) {
308 const char* const kCreditCardTypes[] = {
309 "Visa", "Master Card", "AmEx", "discover"
310 };
311 std::vector<string16> options(arraysize(kCreditCardTypes));
312 for (size_t i = 0; i < arraysize(kCreditCardTypes); ++i) {
313 options[i] = ASCIIToUTF16(kCreditCardTypes[i]);
314 }
315
316 FormFieldData field;
317 field.form_control_type = "select-one";
318 field.option_values = options;
319 field.option_contents = options;
320
321 // Credit card types are inferred from the numbers, so we use test numbers for
322 // each card type. Test card numbers are drawn from
323 // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_num bers.htm
324
325 {
326 // Normal case:
327 CreditCard credit_card;
328 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
329 ASCIIToUTF16("4111111111111111"));
330 credit_card.FillSelectControl(CREDIT_CARD_TYPE, &field);
331 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value);
332 }
333
334 {
335 // Filling should be able to handle intervening whitespace:
336 CreditCard credit_card;
337 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
338 ASCIIToUTF16("5105105105105100"));
339 credit_card.FillSelectControl(CREDIT_CARD_TYPE, &field);
340 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value);
341 }
342
343 {
344 // American Express is sometimes abbreviated as AmEx:
345 CreditCard credit_card;
346 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("371449635398431"));
347 credit_card.FillSelectControl(CREDIT_CARD_TYPE, &field);
348 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value);
349 }
350
351 {
352 // Case insensitivity:
353 CreditCard credit_card;
354 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
355 ASCIIToUTF16("6011111111111117"));
356 credit_card.FillSelectControl(CREDIT_CARD_TYPE, &field);
357 EXPECT_EQ(ASCIIToUTF16("discover"), field.value);
358 }
359 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/credit_card_field_unittest.cc ('k') | chrome/browser/autofill/crypto/rc4_decryptor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698