credit_card_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/guid.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_common_test.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/validation.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/webkit_resources.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* const kValidNumbers[] = { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "378282246310005", 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3714 4963 5398 431", 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3787-3449-3671-000", 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "5610591081018250", 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3056 9309 0259 04", 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3852-0000-0232-37", 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "6011111111111117", 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "6011 0009 9013 9424", 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3530-1113-3330-0000", 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3566002020360505", 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "5555 5555 5555 4444", 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "5105-1051-0510-5100", 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "4111111111111111", 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "4012 8888 8888 1881", 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "4222-2222-2222-2", 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "5019717010103742", 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "6331101999990016", 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // A UnionPay card that doesn't pass the Luhn checksum 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "6200000000000000", 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* const kInvalidNumbers[] = { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "4111 1111 112", /* too short */ 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "41111111111111111115", /* too long */ 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "4111-1111-1111-1110", /* wrong Luhn checksum */ 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "3056 9309 0259 04aa", /* non-digit characters */ 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests credit card summary string generation. This test simulates a variety 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// of different possible summary strings. Variations occur based on the 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// existence of credit card number, month, and year fields. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, PreviewSummaryAndObfuscatedNumberStrings) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 0: empty credit card. 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card0(base::GenerateGUID(), "https://www.example.com/"); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary0 = credit_card0.Label(); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), summary0); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated0 = credit_card0.ObfuscatedNumber(); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), obfuscated0); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 00: Empty credit card with empty strings. 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card00(base::GenerateGUID(), "https://www.example.com/"); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&credit_card00,"John Dillinger", "", "", ""); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary00 = credit_card00.Label(); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(ASCIIToUTF16("John Dillinger")), summary00); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated00 = credit_card00.ObfuscatedNumber(); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), obfuscated00); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 1: No credit card number. 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card1(base::GenerateGUID(), "https://www.example.com/"); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&credit_card1,"John Dillinger", "", "01", "2010"); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary1 = credit_card1.Label(); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(ASCIIToUTF16("John Dillinger")), summary1); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated1 = credit_card1.ObfuscatedNumber(); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), obfuscated1); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 2: No month. 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card2(base::GenerateGUID(), "https://www.example.com/"); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo( 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &credit_card2, "John Dillinger", "5105 1051 0510 5100", "", "2010"); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary2 = credit_card2.Label(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100"), summary2); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated2 = credit_card2.ObfuscatedNumber(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated2); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 3: No year. 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card3(base::GenerateGUID(), "https://www.example.com/"); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo( 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &credit_card3, "John Dillinger", "5105 1051 0510 5100", "01", ""); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary3 = credit_card3.Label(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100"), summary3); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated3 = credit_card3.ObfuscatedNumber(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated3); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 4: Have everything. 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card4(base::GenerateGUID(), "https://www.example.com/"); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo( 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &credit_card4, "John Dillinger", "5105 1051 0510 5100", "01", "2010"); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary4 = credit_card4.Label(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100, Exp: 01/2010"), summary4); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated4 = credit_card4.ObfuscatedNumber(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("************5100"), obfuscated4); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case 5: Very long credit card 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card5(base::GenerateGUID(), "https://www.example.com/"); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo( 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &credit_card5, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "John Dillinger", 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "0123456789 0123456789 0123456789 5105 1051 0510 5100", "01", "2010"); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 summary5 = credit_card5.Label(); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("********************5100, Exp: 01/2010"), summary5); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 obfuscated5 = credit_card5.ObfuscatedNumber(); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("********************5100"), obfuscated5); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, AssignmentOperator) { 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard a(base::GenerateGUID(), "some origin"); 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) test::SetCreditCardInfo(&a, "John Dillinger", "123456789012", "01", "2010"); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Result of assignment should be logically equal to the original profile. 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard b(base::GenerateGUID(), "some other origin"); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) b = a; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(a == b); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assignment to self should not change the profile value. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) a = a; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(a == b); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(CreditCardTest, Copy) { 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard a(base::GenerateGUID(), "https://www.example.com"); 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) test::SetCreditCardInfo(&a, "John Dillinger", "123456789012", "01", "2010"); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Clone should be logically equal to the original. 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreditCard b(a); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(a == b); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(CreditCardTest, Compare) { 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard a(base::GenerateGUID(), std::string()); 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard b(base::GenerateGUID(), std::string()); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Empty cards are the same. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, a.Compare(b)); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GUIDs don't count. 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) a.set_guid(base::GenerateGUID()); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) b.set_guid(base::GenerateGUID()); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, a.Compare(b)); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Origins don't count. 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) a.set_origin("apple"); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) b.set_origin("banana"); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, a.Compare(b)); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Different values produce non-zero results. 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&a, "Jimmy", NULL, NULL, NULL); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&b, "Ringo", NULL, NULL, NULL); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_GT(0, a.Compare(b)); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_LT(0, b.Compare(a)); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test we get the correct icon for each card type. 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(CreditCardTest, IconResourceId) { 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_AMEX, 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kAmericanExpressCard)); 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_DINERS, 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kDinersCard)); 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_DISCOVER, 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kDiscoverCard)); 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_JCB, 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kJCBCard)); 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_MASTERCARD, 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kMasterCard)); 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(IDR_AUTOFILL_CC_VISA, 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard::IconResourceId(kVisaCard)); 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(CreditCardTest, UpdateFromImportedCard) { 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard original_card(base::GenerateGUID(), "https://www.example.com"); 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test::SetCreditCardInfo( 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &original_card, "John Dillinger", "123456789012", "09", "2017"); 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard a = original_card; 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The new card has a different name, expiration date, and origin. 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreditCard b = a; 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.set_guid(base::GenerateGUID()); 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.set_origin("https://www.example.org"); 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("J. Dillinger")); 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("08")); 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2019")); 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(a.UpdateFromImportedCard(b, "en-US")); 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("https://www.example.org", a.origin()); 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("J. Dillinger"), a.GetRawInfo(CREDIT_CARD_NAME)); 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("08"), a.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2019"), a.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Try again, but with no name set for |b|. 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a = original_card; 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_NAME, base::string16()); 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(a.UpdateFromImportedCard(b, "en-US")); 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("https://www.example.org", a.origin()); 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Dillinger"), a.GetRawInfo(CREDIT_CARD_NAME)); 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("08"), a.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2019"), a.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Try again, but with only the original card having a verified origin. 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // |a| should be unchanged. 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a = original_card; 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a.set_origin("Chrome settings"); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("J. Dillinger")); 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(a.UpdateFromImportedCard(b, "en-US")); 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Chrome settings", a.origin()); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("John Dillinger"), a.GetRawInfo(CREDIT_CARD_NAME)); 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("09"), a.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2017"), a.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Try again, but with only the new card having a verified origin. 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a = original_card; 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.set_origin("Chrome settings"); 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(a.UpdateFromImportedCard(b, "en-US")); 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Chrome settings", a.origin()); 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("J. Dillinger"), a.GetRawInfo(CREDIT_CARD_NAME)); 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("08"), a.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2019"), a.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Try again, with both cards having a verified origin. 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a = original_card; 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a.set_origin("Chrome Autofill dialog"); 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.set_origin("Chrome settings"); 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(a.UpdateFromImportedCard(b, "en-US")); 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Chrome settings", a.origin()); 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("J. Dillinger"), a.GetRawInfo(CREDIT_CARD_NAME)); 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("08"), a.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("2019"), a.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Try again, but with |b| having a different card number. 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // |a| should be unchanged. 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) a = original_card; 2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) b.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111")); 2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(a.UpdateFromImportedCard(b, "en-US")); 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(original_card, a); 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, IsComplete) { 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(card.IsComplete()); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Wally T. Walrus")); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(card.IsComplete()); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(card.IsComplete()); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2014")); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kValidNumbers); ++i) { 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(kValidNumbers[i]); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16(kValidNumbers[i])); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(card.IsComplete()); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) { 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(kInvalidNumbers[i]); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16(kInvalidNumbers[i])); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(card.IsComplete()); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(CreditCardTest, IsValid) { 274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CreditCard card; 275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Invalid because expired 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("1")); 277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2010")); 278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111")); 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(card.IsValid()); 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Invalid because card number is not complete 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12")); 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999")); 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("41111")); 285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(card.IsValid()); 286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Valid 288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12")); 289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999")); 290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111")); 291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(card.IsValid()); 292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, InvalidMastercardNumber) { 29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&card, "Baby Face Nelson", 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "5200000000000004", "01", "2010"); 299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kMasterCard, card.type()); 300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(card.IsComplete()); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that we preserve exactly what the user typed for credit card numbers. 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, SetRawInfoCreditCardNumber) { 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(&card, "Bob Dylan", 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4321-5432-6543-xxxx", "07", "2013"); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("4321-5432-6543-xxxx"), 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.GetRawInfo(CREDIT_CARD_NUMBER)); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that we can handle both numeric and named months. 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, SetExpirationMonth) { 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("05")); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("05"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(5, card.expiration_month()); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("7")); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(7, card.expiration_month()); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should fail, and preserve the previous value. 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January")); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(7, card.expiration_month()); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"), "en-US"); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, card.expiration_month()); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("Apr"), "en-US"); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4, card.expiration_month()); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardType) { 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The card type cannot be set directly. 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_TYPE, ASCIIToUTF16("Visa")); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), card.GetRawInfo(CREDIT_CARD_TYPE)); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Setting the number should implicitly set the type. 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111 1111 1111 1111")); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Visa"), card.GetRawInfo(CREDIT_CARD_TYPE)); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardVerificationCode) { 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The verification code cannot be set, as Chrome does not store this data. 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.SetRawInfo(CREDIT_CARD_VERIFICATION_CODE, ASCIIToUTF16("999")); 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::string16(), card.GetRawInfo(CREDIT_CARD_VERIFICATION_CODE)); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardMonthExact) { 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kMonthsNumeric[] = { 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kMonthsNumeric)); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) { 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kMonthsNumeric[i]); 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("01"), field.value); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardMonthAbbreviated) { 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kMonthsAbbreviated[] = { 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Jan", "Feb", "Mar", "Apr", "May", "Jun", 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kMonthsAbbreviated)); 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i) { 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Jan"), field.value); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardMonthFull) { 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kMonthsFull[] = { 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "January", "February", "March", "April", "May", "June", 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "July", "August", "September", "October", "November", "December", 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kMonthsFull)); 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kMonthsFull); ++i) { 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kMonthsFull[i]); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("January"), field.value); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardMonthNumeric) { 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kMonthsNumeric[] = { 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kMonthsNumeric)); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) { 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kMonthsNumeric[i]); 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 43690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1"), field.value); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardTwoDigitYear) { 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kYears[] = { 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "12", "13", "14", "15", "16", "17", "18", "19" 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kYears)); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kYears); ++i) { 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kYears[i]); 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 45690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2017")); 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_EXP_4_DIGIT_YEAR, "en-US", &field); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("17"), field.value); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2017, credit_card.expiration_year()); 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CreditCardTest, CreditCardTypeSelectControl) { 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* const kCreditCardTypes[] = { 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Visa", "Master Card", "AmEx", "discover" 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> options(arraysize(kCreditCardTypes)); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < arraysize(kCreditCardTypes); ++i) { 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) options[i] = ASCIIToUTF16(kCreditCardTypes[i]); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.form_control_type = "select-one"; 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_values = options; 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.option_contents = options; 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Credit card types are inferred from the numbers, so we use test numbers for 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // each card type. Test card numbers are drawn from 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Normal case: 48390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("4111111111111111")); 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Filling should be able to handle intervening whitespace: 49290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("5105105105105100")); 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // American Express is sometimes abbreviated as AmEx: 50190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("371449635398431")); 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Case insensitivity: 50990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("6011111111111117")); 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("discover"), field.value); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 517eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(CreditCardTest, GetCreditCardType) { 518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch struct { 519eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string card_number; 520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string type; 521eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_valid; 522eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } test_cases[] = { 523eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The relevant sample numbers from 524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm 525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "378282246310005", kAmericanExpressCard, true }, 526eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "371449635398431", kAmericanExpressCard, true }, 527eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "378734493671000", kAmericanExpressCard, true }, 528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "30569309025904", kDinersCard, true }, 529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "38520000023237", kDinersCard, true }, 530eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011111111111117", kDiscoverCard, true }, 531eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011000990139424", kDiscoverCard, true }, 532eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3530111333300000", kJCBCard, true }, 533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3566002020360505", kJCBCard, true }, 534eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5555555555554444", kMasterCard, true }, 535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5105105105105100", kMasterCard, true }, 536eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4111111111111111", kVisaCard, true }, 537eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4012888888881881", kVisaCard, true }, 538eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4222222222222", kVisaCard, true }, 539eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 540eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The relevant sample numbers from 541eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // http://auricsystems.com/support-center/sample-credit-card-numbers/ 542eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "343434343434343", kAmericanExpressCard, true }, 543eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "371144371144376", kAmericanExpressCard, true }, 544eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "341134113411347", kAmericanExpressCard, true }, 545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "36438936438936", kDinersCard, true }, 546eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "36110361103612", kDinersCard, true }, 547eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "36111111111111", kDinersCard, true }, 548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011016011016011", kDiscoverCard, true }, 549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011000990139424", kDiscoverCard, true }, 550eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011000000000004", kDiscoverCard, true }, 551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011000995500000", kDiscoverCard, true }, 552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6500000000000002", kDiscoverCard, true }, 553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3566002020360505", kJCBCard, true }, 554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3528000000000007", kJCBCard, true }, 555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5500005555555559", kMasterCard, true }, 556eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5555555555555557", kMasterCard, true }, 557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5454545454545454", kMasterCard, true }, 558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5555515555555551", kMasterCard, true }, 559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5405222222222226", kMasterCard, true }, 560eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5478050000000007", kMasterCard, true }, 561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5111005111051128", kMasterCard, true }, 562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5112345112345114", kMasterCard, true }, 563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5115915115915118", kMasterCard, true }, 564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // A UnionPay card that doesn't pass the Luhn checksum 5667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch { "6200000000000000", kUnionPay, true }, 5677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 568eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Empty string 569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { std::string(), kGenericCard, false }, 570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Non-numeric 572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "garbage", kGenericCard, false }, 573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4garbage", kVisaCard, false }, 574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Fails Luhn check. 576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4111111111111112", kVisaCard, false }, 577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Invalid length. 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3434343434343434", kAmericanExpressCard, false }, 580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "411111111111116", kVisaCard, false }, 581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Issuer Identification Numbers (IINs) that Chrome recognizes. 583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "4", kVisaCard, false }, 584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "34", kAmericanExpressCard, false }, 585eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "37", kAmericanExpressCard, false }, 586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "300", kDinersCard, false }, 587eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "301", kDinersCard, false }, 588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "302", kDinersCard, false }, 589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "303", kDinersCard, false }, 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "304", kDinersCard, false }, 591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "305", kDinersCard, false }, 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3095", kDinersCard, false }, 593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "36", kDinersCard, false }, 594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "38", kDinersCard, false }, 595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "39", kDinersCard, false }, 596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6011", kDiscoverCard, false }, 597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "644", kDiscoverCard, false }, 598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "645", kDiscoverCard, false }, 599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "646", kDiscoverCard, false }, 600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "647", kDiscoverCard, false }, 601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "648", kDiscoverCard, false }, 602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "649", kDiscoverCard, false }, 603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "65", kDiscoverCard, false }, 604eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3528", kJCBCard, false }, 605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3531", kJCBCard, false }, 606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3589", kJCBCard, false }, 607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "51", kMasterCard, false }, 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "52", kMasterCard, false }, 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "53", kMasterCard, false }, 610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "54", kMasterCard, false }, 611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "55", kMasterCard, false }, 6127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch { "62", kUnionPay, false }, 613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Not enough data to determine an IIN uniquely. 615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3", kGenericCard, false }, 616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "30", kGenericCard, false }, 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "309", kGenericCard, false }, 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "35", kGenericCard, false }, 619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "5", kGenericCard, false }, 620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "6", kGenericCard, false }, 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "60", kGenericCard, false }, 622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "601", kGenericCard, false }, 623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "64", kGenericCard, false }, 624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Unknown IINs. 626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "0", kGenericCard, false }, 627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "1", kGenericCard, false }, 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "2", kGenericCard, false }, 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "306", kGenericCard, false }, 630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "307", kGenericCard, false }, 631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "308", kGenericCard, false }, 632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3091", kGenericCard, false }, 633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3094", kGenericCard, false }, 634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3096", kGenericCard, false }, 635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "31", kGenericCard, false }, 636eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "32", kGenericCard, false }, 637eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "33", kGenericCard, false }, 638eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "351", kGenericCard, false }, 639eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "3527", kGenericCard, false }, 640eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "359", kGenericCard, false }, 641eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "50", kGenericCard, false }, 642eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "56", kGenericCard, false }, 643eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "57", kGenericCard, false }, 644eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "58", kGenericCard, false }, 645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "59", kGenericCard, false }, 646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "600", kGenericCard, false }, 647eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "602", kGenericCard, false }, 648eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "603", kGenericCard, false }, 649eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "604", kGenericCard, false }, 650eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "605", kGenericCard, false }, 651eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "606", kGenericCard, false }, 652eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "607", kGenericCard, false }, 653eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "608", kGenericCard, false }, 654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "609", kGenericCard, false }, 655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "61", kGenericCard, false }, 656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "63", kGenericCard, false }, 657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "640", kGenericCard, false }, 658eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "641", kGenericCard, false }, 659eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "642", kGenericCard, false }, 660eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "643", kGenericCard, false }, 661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "66", kGenericCard, false }, 662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "67", kGenericCard, false }, 663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "68", kGenericCard, false }, 664eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "69", kGenericCard, false }, 665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "7", kGenericCard, false }, 666eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "8", kGenericCard, false }, 667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "9", kGenericCard, false }, 668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Oddball case: Unknown issuer, but valid Luhn check and plausible length. 670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "7000700070007000", kGenericCard, true }, 671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 card_number = ASCIIToUTF16(test_cases[i].card_number); 675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE(card_number); 676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(test_cases[i].type, CreditCard::GetCreditCardType(card_number)); 677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(test_cases[i].is_valid, IsValidCreditCardNumber(card_number)); 678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 680eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 682