1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autofill/autofill_common_test.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/credit_card.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests credit card summary string generation. This test simulates a variety 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of different possible summary strings. Variations occur based on the 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// existence of credit card number, month, and year fields. 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(CreditCardTest, PreviewSummaryAndObfuscatedNumberStrings) { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 0: empty credit card. 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card0; 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary0 = credit_card0.Label(); 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(string16(), summary0); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated0 = credit_card0.ObfuscatedNumber(); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(string16(), obfuscated0); 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 00: Empty credit card with empty strings. 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card00; 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&credit_card00, 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "John Dillinger", "", "", ""); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary00 = credit_card00.Label(); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(string16(ASCIIToUTF16("John Dillinger")), summary00); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated00 = credit_card00.ObfuscatedNumber(); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(string16(), obfuscated00); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 1: No credit card number. 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card1; 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&credit_card1, 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "John Dillinger", "", "01", "2010"); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary1 = credit_card1.Label(); 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(string16(ASCIIToUTF16("John Dillinger")), summary1); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated1 = credit_card1.ObfuscatedNumber(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(string16(), obfuscated1); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 2: No month. 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card2; 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&credit_card2, 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "John Dillinger", "5105 1051 0510 5100", "", "2010"); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary2 = credit_card2.Label(); 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100"), summary2); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated2 = credit_card2.ObfuscatedNumber(); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated2); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 3: No year. 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card3; 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&credit_card3, 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "John Dillinger", "5105 1051 0510 5100", "01", ""); 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary3 = credit_card3.Label(); 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100"), summary3); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated3 = credit_card3.ObfuscatedNumber(); 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated3); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Case 4: Have everything. 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card4; 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&credit_card4, 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "John Dillinger", "5105 1051 0510 5100", "01", "2010"); 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 summary4 = credit_card4.Label(); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100, Exp: 01/2010"), summary4); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 obfuscated4 = credit_card4.ObfuscatedNumber(); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated4); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST(CreditCardTest, AssignmentOperator) { 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen CreditCard a, b; 7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Result of assignment should be logically equal to the original profile. 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&a, "John Dillinger", 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "123456789012", "01", "2010"); 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen b = a; 7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(a == b); 7621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Assignment to self should not change the profile value. 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen a = a; 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(a == b); 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(CreditCardTest, IsValidCreditCardNumber) { 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16 valid_numbers[] = { 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("378282246310005"), 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3714 4963 5398 431"), 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3787-3449-3671-000"), 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("5610591081018250"), 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3056 9309 0259 04"), 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3852-0000-0232-37"), 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("6011111111111117"), 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("6011 0009 9013 9424"), 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3530-1113-3330-0000"), 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3566002020360505"), 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("5555 5555 5555 4444"), 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("5105-1051-0510-5100"), 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("4111111111111111"), 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("4012 8888 8888 1881"), 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("4222-2222-2222-2"), 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("5019717010103742"), 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("6331101999990016"), 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16 invalid_numbers[] = { 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("4111 1111 112"), /* too short */ 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("41111111111111111115"), /* too long */ 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("4111-1111-1111-1110"), /* wrong Luhn checksum */ 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("3056 9309 0259 04aa"), /* non-digit characters */ 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < arraysize(valid_numbers); ++i) { 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SCOPED_TRACE(valid_numbers[i]); 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(CreditCard::IsValidCreditCardNumber(valid_numbers[i])); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < arraysize(invalid_numbers); ++i) { 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SCOPED_TRACE(invalid_numbers[i]); 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(CreditCard::IsValidCreditCardNumber(invalid_numbers[i])); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 120dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST(CreditCardTest, InvalidMastercardNumber) { 121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CreditCard card; 122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&card, "Baby Face Nelson", 124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "5200000000000004", "01", "2010"); 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("genericCC", card.type()); 126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Verify that we preserve exactly what the user typed for credit card numbers. 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(CreditCardTest, SetInfoCreditCardNumber) { 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreditCard card; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::SetCreditCardInfo(&card, "Bob Dylan", 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "4321-5432-6543-xxxx", "07", "2013"); 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("4321-5432-6543-xxxx"), 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen card.GetInfo(CREDIT_CARD_NUMBER)); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 137