// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/guid.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/autofill/autofill_dialog_models.h" #include "chrome/browser/ui/autofill/data_model_wrapper.h" #include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/field_types.h" #include "testing/gtest/include/gtest/gtest.h" using base::ASCIIToUTF16; namespace autofill { TEST(AutofillCreditCardWrapperTest, GetInfoCreditCardExpMonth) { CreditCard card; MonthComboboxModel model; for (int month = 1; month <= 12; ++month) { card.SetRawInfo(CREDIT_CARD_EXP_MONTH, base::IntToString16(month)); AutofillCreditCardWrapper wrapper(&card); EXPECT_EQ(model.GetItemAt(month), wrapper.GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH))); } } TEST(AutofillCreditCardWrapperTest, GetDisplayTextEmptyWhenExpired) { CreditCard card; card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("1")); card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2010")); card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111")); AutofillCreditCardWrapper wrapper(&card); base::string16 unused, unused2; EXPECT_FALSE(wrapper.GetDisplayText(&unused, &unused2)); } TEST(AutofillCreditCardWrapperTest, GetDisplayTextEmptyWhenInvalid) { CreditCard card; card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12")); card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999")); card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("41111")); AutofillCreditCardWrapper wrapper(&card); base::string16 unused, unused2; EXPECT_FALSE(wrapper.GetDisplayText(&unused, &unused2)); } TEST(AutofillCreditCardWrapperTest, GetDisplayTextNotEmptyWhenValid) { CreditCard card; card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12")); card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999")); card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111")); AutofillCreditCardWrapper wrapper(&card); base::string16 unused, unused2; EXPECT_TRUE(wrapper.GetDisplayText(&unused, &unused2)); } TEST(DataModelWrapperTest, GetDisplayText) { AutofillProfile profile = test::GetFullProfile(); base::string16 vertical, horizontal; EXPECT_TRUE( AutofillProfileWrapper(&profile).GetDisplayText(&horizontal, &vertical)); EXPECT_EQ(ASCIIToUTF16( "John H. Doe, 666 Erebus St., Apt 8, Elysium, CA 91111\n" "johndoe@hades.com\n" "1 650-211-1111"), horizontal); EXPECT_EQ(ASCIIToUTF16( "John H. Doe\n" "666 Erebus St.\n" "Apt 8\n" "Elysium, CA 91111\n" "johndoe@hades.com\n" "1 650-211-1111"), vertical); // A Japanese address. AutofillProfile foreign_profile( base::GenerateGUID(), "http://www.example.com/"); foreign_profile.SetRawInfo( ADDRESS_HOME_COUNTRY, ASCIIToUTF16("JP")); foreign_profile.SetRawInfo( ADDRESS_HOME_STATE, base::WideToUTF16(L"\u6771\u4EAC\u90FD")); foreign_profile.SetRawInfo( ADDRESS_HOME_CITY, base::WideToUTF16(L"\u6E0B\u8C37\u533A")); foreign_profile.SetRawInfo( ADDRESS_HOME_DEPENDENT_LOCALITY, base::WideToUTF16(L"\uC911\uAD6C")); foreign_profile.SetRawInfo( ADDRESS_HOME_STREET_ADDRESS, base::WideToUTF16( L"\u685C\u4E18\u753A26-1\n" L"\u30BB\u30EB\u30EA\u30A2\u30F3\u30BF\u30EF\u30FC6\u968E")); foreign_profile.SetRawInfo( NAME_FULL, base::WideToUTF16(L"\u6751\u4E0A \u7F8E\u7D00")); foreign_profile.SetRawInfo(ADDRESS_HOME_ZIP, base::ASCIIToUTF16("150-8512")); foreign_profile.SetRawInfo( PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("+81-3-6384-9000")); EXPECT_TRUE(AutofillProfileWrapper(&foreign_profile).GetDisplayText( &horizontal, &vertical)); EXPECT_EQ( base::WideToUTF16( L"\u3012150-8512\n" L"\u6771\u4EAC\u90FD\u6E0B\u8C37\u533A\n" L"\u685C\u4E18\u753A26-1\n" L"\u30BB\u30EB\u30EA\u30A2\u30F3\u30BF\u30EF\u30FC6\u968E\n" L"\u6751\u4E0A \u7F8E\u7D00\n" L"+81-3-6384-9000"), vertical); // TODO(estade): we should also verify that |horizontal| is correct, but right // now it uses the incorrect address line separator. See: // http://crbug.com/270261 } TEST(DataModelWrapperTest, GetDisplayPhoneNumber) { const base::string16 national_unformatted = ASCIIToUTF16("3104567890"); const base::string16 national_formatted = ASCIIToUTF16("(310) 456-7890"); const base::string16 international_unformatted = ASCIIToUTF16("13104567890"); const base::string16 international_unformatted_with_plus = ASCIIToUTF16("+13104567890"); const base::string16 international_formatted = ASCIIToUTF16("1 310-456-7890"); const base::string16 user_formatted = ASCIIToUTF16("310.456 78 90"); // Autofill numbers that are unformatted get formatted either nationally or // internationally depending on the presence of a country code. Formatted // numbers stay formatted. AutofillProfile profile(test::GetVerifiedProfile()); AutofillProfileWrapper profile_wrapper(&profile); profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, international_unformatted); EXPECT_EQ(international_formatted, profile_wrapper.GetInfoForDisplay( AutofillType(PHONE_HOME_WHOLE_NUMBER))); profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, international_unformatted_with_plus); EXPECT_EQ( international_formatted, profile_wrapper.GetInfoForDisplay(AutofillType(PHONE_HOME_WHOLE_NUMBER))); profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, national_unformatted); EXPECT_EQ(national_formatted, profile_wrapper.GetInfoForDisplay( AutofillType(PHONE_HOME_WHOLE_NUMBER))); profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, national_formatted); EXPECT_EQ(national_formatted, profile_wrapper.GetInfoForDisplay( AutofillType(PHONE_HOME_WHOLE_NUMBER))); profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, user_formatted); EXPECT_EQ(user_formatted, profile_wrapper.GetInfoForDisplay( AutofillType(PHONE_HOME_WHOLE_NUMBER))); } } // namespace autofill