Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / autofill / data_model_wrapper_unittest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/guid.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/ui/autofill/autofill_dialog_models.h"
10 #include "chrome/browser/ui/autofill/data_model_wrapper.h"
11 #include "components/autofill/content/browser/wallet/wallet_items.h"
12 #include "components/autofill/content/browser/wallet/wallet_test_util.h"
13 #include "components/autofill/core/browser/autofill_profile.h"
14 #include "components/autofill/core/browser/autofill_test_utils.h"
15 #include "components/autofill/core/browser/credit_card.h"
16 #include "components/autofill/core/browser/field_types.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 using base::ASCIIToUTF16;
20
21 namespace autofill {
22
23 TEST(AutofillCreditCardWrapperTest, GetInfoCreditCardExpMonth) {
24   CreditCard card;
25   MonthComboboxModel model;
26   for (int month = 1; month <= 12; ++month) {
27     card.SetRawInfo(CREDIT_CARD_EXP_MONTH, base::IntToString16(month));
28     AutofillCreditCardWrapper wrapper(&card);
29     EXPECT_EQ(model.GetItemAt(month),
30               wrapper.GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH)));
31   }
32 }
33
34 TEST(AutofillCreditCardWrapperTest, GetDisplayTextEmptyWhenExpired) {
35   CreditCard card;
36   card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("1"));
37   card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2010"));
38   card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111"));
39   AutofillCreditCardWrapper wrapper(&card);
40   base::string16 unused, unused2;
41   EXPECT_FALSE(wrapper.GetDisplayText(&unused, &unused2));
42 }
43
44 TEST(AutofillCreditCardWrapperTest, GetDisplayTextEmptyWhenInvalid) {
45   CreditCard card;
46   card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12"));
47   card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999"));
48   card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("41111"));
49   AutofillCreditCardWrapper wrapper(&card);
50   base::string16 unused, unused2;
51   EXPECT_FALSE(wrapper.GetDisplayText(&unused, &unused2));
52 }
53
54 TEST(AutofillCreditCardWrapperTest, GetDisplayTextNotEmptyWhenValid) {
55   CreditCard card;
56   card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("12"));
57   card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("9999"));
58   card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("4111111111111111"));
59   AutofillCreditCardWrapper wrapper(&card);
60   base::string16 unused, unused2;
61   EXPECT_TRUE(wrapper.GetDisplayText(&unused, &unused2));
62 }
63
64 TEST(WalletInstrumentWrapperTest, GetDisplayTextEmptyWhenExpired) {
65   scoped_ptr<wallet::WalletItems::MaskedInstrument> instrument(
66       wallet::GetTestMaskedInstrument());
67   instrument->status_ = wallet::WalletItems::MaskedInstrument::EXPIRED;
68   WalletInstrumentWrapper wrapper(instrument.get());
69   base::string16 unused, unused2;
70   EXPECT_FALSE(wrapper.GetDisplayText(&unused, &unused2));
71 }
72
73 TEST(DataModelWrapperTest, GetDisplayTextEmptyWithoutPhone) {
74   scoped_ptr<wallet::WalletItems::MaskedInstrument> instrument(
75       wallet::GetTestMaskedInstrument());
76
77   WalletInstrumentWrapper instrument_wrapper(instrument.get());
78   base::string16 unused, unused2;
79   EXPECT_TRUE(instrument_wrapper.GetDisplayText(&unused, &unused2));
80
81   WalletAddressWrapper address_wrapper(&instrument->address());
82   EXPECT_TRUE(address_wrapper.GetDisplayText(&unused, &unused2));
83
84   const_cast<wallet::Address*>(&instrument->address())->SetPhoneNumber(
85       base::string16());
86
87   EXPECT_EQ(base::string16(),
88             instrument_wrapper.GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER)));
89   EXPECT_FALSE(instrument_wrapper.GetDisplayText(&unused, &unused2));
90
91   EXPECT_EQ(base::string16(),
92             address_wrapper.GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER)));
93   EXPECT_FALSE(address_wrapper.GetDisplayText(&unused, &unused2));
94 }
95
96 TEST(DataModelWrapperTest, GetDisplayText) {
97   AutofillProfile profile = test::GetFullProfile();
98   base::string16 vertical, horizontal;
99   EXPECT_TRUE(
100       AutofillProfileWrapper(&profile).GetDisplayText(&horizontal, &vertical));
101   EXPECT_EQ(ASCIIToUTF16(
102                 "John H. Doe, 666 Erebus St., Apt 8, Elysium, CA 91111\n"
103                 "johndoe@hades.com\n"
104                 "1 650-211-1111"),
105             horizontal);
106   EXPECT_EQ(ASCIIToUTF16(
107                 "John H. Doe\n"
108                 "666 Erebus St.\n"
109                 "Apt 8\n"
110                 "Elysium, CA 91111\n"
111                 "johndoe@hades.com\n"
112                 "1 650-211-1111"),
113             vertical);
114
115   // A Japanese address.
116   AutofillProfile foreign_profile(
117       base::GenerateGUID(), "http://www.example.com/");
118   foreign_profile.SetRawInfo(
119       ADDRESS_HOME_COUNTRY, ASCIIToUTF16("JP"));
120   foreign_profile.SetRawInfo(
121       ADDRESS_HOME_STATE,
122       base::WideToUTF16(L"\u6771\u4EAC\u90FD"));
123   foreign_profile.SetRawInfo(
124       ADDRESS_HOME_CITY,
125       base::WideToUTF16(L"\u6E0B\u8C37\u533A"));
126   foreign_profile.SetRawInfo(
127       ADDRESS_HOME_DEPENDENT_LOCALITY,
128       base::WideToUTF16(L"\uC911\uAD6C"));
129   foreign_profile.SetRawInfo(
130       ADDRESS_HOME_STREET_ADDRESS,
131       base::WideToUTF16(
132           L"\u685C\u4E18\u753A26-1\n"
133           L"\u30BB\u30EB\u30EA\u30A2\u30F3\u30BF\u30EF\u30FC6\u968E"));
134   foreign_profile.SetRawInfo(
135       NAME_FULL,
136       base::WideToUTF16(L"\u6751\u4E0A \u7F8E\u7D00"));
137   foreign_profile.SetRawInfo(ADDRESS_HOME_ZIP, base::ASCIIToUTF16("150-8512"));
138   foreign_profile.SetRawInfo(
139       PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("+81-3-6384-9000"));
140
141   EXPECT_TRUE(AutofillProfileWrapper(&foreign_profile).GetDisplayText(
142       &horizontal, &vertical));
143   EXPECT_EQ(
144       base::WideToUTF16(
145           L"\u3012150-8512\n"
146           L"\u6771\u4EAC\u90FD\u6E0B\u8C37\u533A\n"
147           L"\u685C\u4E18\u753A26-1\n"
148           L"\u30BB\u30EB\u30EA\u30A2\u30F3\u30BF\u30EF\u30FC6\u968E\n"
149           L"\u6751\u4E0A \u7F8E\u7D00\n"
150           L"+81-3-6384-9000"),
151       vertical);
152   // TODO(estade): we should also verify that |horizontal| is correct, but right
153   // now it uses the incorrect address line separator. See:
154   // http://crbug.com/270261
155 }
156
157 TEST(WalletInstrumentWrapperTest, GetInfoCreditCardExpMonth) {
158   scoped_ptr<wallet::WalletItems::MaskedInstrument> instrument(
159       wallet::GetTestMaskedInstrument());
160   MonthComboboxModel model;
161   for (int month = 1; month <= 12; ++month) {
162     instrument->expiration_month_ = month;
163     WalletInstrumentWrapper wrapper(instrument.get());
164     EXPECT_EQ(model.GetItemAt(month),
165               wrapper.GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH)));
166   }
167 }
168
169 TEST(DataModelWrapperTest, GetDisplayPhoneNumber) {
170   const base::string16 national_unformatted = ASCIIToUTF16("3104567890");
171   const base::string16 national_formatted = ASCIIToUTF16("(310) 456-7890");
172   const base::string16 international_unformatted = ASCIIToUTF16("13104567890");
173   const base::string16 international_unformatted_with_plus =
174       ASCIIToUTF16("+13104567890");
175   const base::string16 international_formatted = ASCIIToUTF16("1 310-456-7890");
176   const base::string16 user_formatted = ASCIIToUTF16("310.456 78 90");
177
178   scoped_ptr<wallet::WalletItems::MaskedInstrument> instrument(
179       wallet::GetTestMaskedInstrument());
180   AutofillProfile profile(test::GetVerifiedProfile());
181
182   // No matter what format a wallet number is in, it gets formatted in a
183   // standard way.
184   WalletInstrumentWrapper instrument_wrapper(instrument.get());
185   const_cast<wallet::Address*>(&instrument->address())->
186       SetPhoneNumber(national_unformatted);
187   EXPECT_EQ(national_formatted,
188             instrument_wrapper.GetInfoForDisplay(
189                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
190   WalletAddressWrapper address_wrapper(&instrument->address());
191   EXPECT_EQ(national_formatted,
192             address_wrapper.GetInfoForDisplay(
193                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
194   AutofillProfileWrapper profile_wrapper(&profile);
195
196   const_cast<wallet::Address*>(&instrument->address())->
197       SetPhoneNumber(national_formatted);
198   EXPECT_EQ(national_formatted,
199             instrument_wrapper.GetInfoForDisplay(
200                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
201   EXPECT_EQ(national_formatted,
202             address_wrapper.GetInfoForDisplay(
203                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
204
205   const_cast<wallet::Address*>(&instrument->address())->
206       SetPhoneNumber(international_unformatted);
207   EXPECT_EQ(national_formatted,
208             instrument_wrapper.GetInfoForDisplay(
209                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
210   EXPECT_EQ(national_formatted,
211             address_wrapper.GetInfoForDisplay(
212                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
213
214   const_cast<wallet::Address*>(&instrument->address())
215       ->SetPhoneNumber(international_unformatted_with_plus);
216   EXPECT_EQ(national_formatted,
217             instrument_wrapper.GetInfoForDisplay(
218                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
219   EXPECT_EQ(
220       national_formatted,
221       address_wrapper.GetInfoForDisplay(AutofillType(PHONE_HOME_WHOLE_NUMBER)));
222
223   // Autofill numbers that are unformatted get formatted either nationally or
224   // internationally depending on the presence of a country code. Formatted
225   // numbers stay formatted.
226   profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, international_unformatted);
227   EXPECT_EQ(international_formatted,
228             profile_wrapper.GetInfoForDisplay(
229                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
230   profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER,
231                      international_unformatted_with_plus);
232   EXPECT_EQ(
233       international_formatted,
234       profile_wrapper.GetInfoForDisplay(AutofillType(PHONE_HOME_WHOLE_NUMBER)));
235   profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, national_unformatted);
236   EXPECT_EQ(national_formatted,
237             profile_wrapper.GetInfoForDisplay(
238                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
239   profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, national_formatted);
240   EXPECT_EQ(national_formatted,
241             profile_wrapper.GetInfoForDisplay(
242                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
243   profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, user_formatted);
244   EXPECT_EQ(user_formatted,
245             profile_wrapper.GetInfoForDisplay(
246                 AutofillType(PHONE_HOME_WHOLE_NUMBER)));
247 }
248
249 }  // namespace autofill