Add diagnostics_writer.cc to the list of files allowed to printf.
[chromium-blink-merge.git] / components / autofill / content / browser / wallet / wallet_address_unittest.cc
bloba81b137cb4913858f66f0c370ff031693e542a40
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.
5 #include "base/json/json_reader.h"
6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "base/values.h"
10 #include "components/autofill/content/browser/wallet/wallet_address.h"
11 #include "components/autofill/content/browser/wallet/wallet_test_util.h"
12 #include "components/autofill/core/browser/autofill_profile.h"
13 #include "components/autofill/core/browser/autofill_test_utils.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 using base::ASCIIToUTF16;
18 namespace {
20 const char kAddressMissingObjectId[] =
21 "{"
22 " \"phone_number\":\"phone_number\","
23 " \"postal_address\":"
24 " {"
25 " \"recipient_name\":\"recipient_name\","
26 " \"address_line\":"
27 " ["
28 " \"address_line_1\","
29 " \"address_line_2\""
30 " ],"
31 " \"locality_name\":\"locality_name\","
32 " \"dependent_locality_name\":\"dependent_locality_name\","
33 " \"administrative_area_name\":\"administrative_area_name\","
34 " \"postal_code_number\":\"postal_code_number\","
35 " \"sorting_code\":\"sorting_code\","
36 " \"country_name_code\":\"US\","
37 " \"language_code\":\"language_code\""
38 " }"
39 "}";
41 const char kAddressMissingCountryNameCode[] =
42 "{"
43 " \"id\":\"id\","
44 " \"phone_number\":\"phone_number\","
45 " \"postal_address\":"
46 " {"
47 " \"recipient_name\":\"recipient_name\","
48 " \"address_line\":"
49 " ["
50 " \"address_line_1\","
51 " \"address_line_2\""
52 " ],"
53 " \"locality_name\":\"locality_name\","
54 " \"dependent_locality_name\":\"dependent_locality_name\","
55 " \"administrative_area_name\":\"administrative_area_name\","
56 " \"postal_code_number\":\"postal_code_number\","
57 " \"sorting_code\":\"sorting_code\""
58 " }"
59 "}";
61 const char kAddressMissingRecipientName[] =
62 "{"
63 " \"id\":\"id\","
64 " \"phone_number\":\"phone_number\","
65 " \"postal_address\":"
66 " {"
67 " \"address_line\":"
68 " ["
69 " \"address_line_1\","
70 " \"address_line_2\""
71 " ],"
72 " \"locality_name\":\"locality_name\","
73 " \"dependent_locality_name\":\"dependent_locality_name\","
74 " \"administrative_area_name\":\"administrative_area_name\","
75 " \"postal_code_number\":\"postal_code_number\","
76 " \"sorting_code\":\"sorting_code\","
77 " \"country_name_code\":\"US\""
78 " }"
79 "}";
81 const char kAddressMissingPostalCodeNumber[] =
82 "{"
83 " \"id\":\"id\","
84 " \"phone_number\":\"phone_number\","
85 " \"postal_address\":"
86 " {"
87 " \"recipient_name\":\"recipient_name\","
88 " \"address_line\":"
89 " ["
90 " \"address_line_1\","
91 " \"address_line_2\""
92 " ],"
93 " \"locality_name\":\"locality_name\","
94 " \"dependent_locality_name\":\"dependent_locality_name\","
95 " \"administrative_area_name\":\"administrative_area_name\","
96 " \"sorting_code\":\"sorting_code\","
97 " \"country_name_code\":\"US\""
98 " }"
99 "}";
101 const char kAddressMissingLanguageCode[] =
103 " \"id\":\"id\","
104 " \"phone_number\":\"phone_number\","
105 " \"is_minimal_address\":true,"
106 " \"postal_address\":"
107 " {"
108 " \"recipient_name\":\"recipient_name\","
109 " \"address_line\":"
110 " ["
111 " \"address_line_1\","
112 " \"address_line_2\""
113 " ],"
114 " \"locality_name\":\"locality_name\","
115 " \"dependent_locality_name\":\"dependent_locality_name\","
116 " \"administrative_area_name\":\"administrative_area_name\","
117 " \"country_name_code\":\"US\","
118 " \"postal_code_number\":\"postal_code_number\","
119 " \"sorting_code\":\"sorting_code\""
120 " }"
121 "}";
123 const char kValidAddress[] =
125 " \"id\":\"id\","
126 " \"phone_number\":\"phone_number\","
127 " \"is_minimal_address\":true,"
128 " \"postal_address\":"
129 " {"
130 " \"recipient_name\":\"recipient_name\","
131 " \"address_line\":"
132 " ["
133 " \"address_line_1\","
134 " \"address_line_2\""
135 " ],"
136 " \"locality_name\":\"locality_name\","
137 " \"dependent_locality_name\":\"dependent_locality_name\","
138 " \"administrative_area_name\":\"administrative_area_name\","
139 " \"country_name_code\":\"US\","
140 " \"postal_code_number\":\"postal_code_number\","
141 " \"sorting_code\":\"sorting_code\","
142 " \"language_code\":\"language_code\""
143 " }"
144 "}";
146 const char kClientAddressMissingCountryCode[] =
148 " \"name\":\"name\","
149 " \"address1\":\"address1\","
150 " \"address2\":\"address2\","
151 " \"city\":\"city\","
152 " \"state\":\"state\","
153 " \"postal_code\":\"postal_code\","
154 " \"sorting_code\":\"sorting_code\","
155 " \"phone_number\":\"phone_number\""
156 "}";
158 const char kClientAddressMissingPostalCode[] =
160 " \"name\":\"name\","
161 " \"address1\":\"address1\","
162 " \"address2\":\"address2\","
163 " \"city\":\"city\","
164 " \"state\":\"state\","
165 " \"phone_number\":\"phone_number\","
166 " \"country_code\":\"US\""
167 "}";
169 const char kClientAddressMissingName[] =
171 " \"address1\":\"address1\","
172 " \"address2\":\"address2\","
173 " \"city\":\"city\","
174 " \"state\":\"state\","
175 " \"postal_code\":\"postal_code\","
176 " \"sorting_code\":\"sorting_code\","
177 " \"phone_number\":\"phone_number\","
178 " \"country_code\":\"US\""
179 "}";
181 const char kClientAddressMissingLanguageCode[] =
183 " \"name\":\"name\","
184 " \"address1\":\"address1\","
185 " \"address2\":\"address2\","
186 " \"city\":\"city\","
187 " \"dependent_locality_name\":\"district\","
188 " \"state\":\"state\","
189 " \"postal_code\":\"postal_code\","
190 " \"sorting_code\":\"sorting_code\","
191 " \"phone_number\":\"phone_number\","
192 " \"country_code\":\"US\","
193 " \"type\":\"FULL\""
194 "}";
196 const char kClientValidAddress[] =
198 " \"name\":\"name\","
199 " \"address1\":\"address1\","
200 " \"address2\":\"address2\","
201 " \"city\":\"city\","
202 " \"dependent_locality_name\":\"district\","
203 " \"state\":\"state\","
204 " \"postal_code\":\"postal_code\","
205 " \"sorting_code\":\"sorting_code\","
206 " \"phone_number\":\"phone_number\","
207 " \"country_code\":\"US\","
208 " \"type\":\"FULL\","
209 " \"language_code\":\"language_code\""
210 "}";
212 } // anonymous namespace
214 namespace autofill {
215 namespace wallet {
217 class WalletAddressTest : public testing::Test {
218 public:
219 WalletAddressTest() {}
220 protected:
221 void SetUpDictionary(const std::string& json) {
222 scoped_ptr<base::Value> value(base::JSONReader::Read(json));
223 DCHECK(value.get());
224 DCHECK(value->IsType(base::Value::TYPE_DICTIONARY));
225 dict_.reset(static_cast<base::DictionaryValue*>(value.release()));
228 scoped_ptr<const base::DictionaryValue> dict_;
231 TEST_F(WalletAddressTest, AddressEqualsIgnoreID) {
232 Address address1("US",
233 ASCIIToUTF16("recipient_name"),
234 StreetAddress("address_line_1", "address_line_2"),
235 ASCIIToUTF16("locality_name"),
236 ASCIIToUTF16("dependent_locality_name"),
237 ASCIIToUTF16("administrative_area_name"),
238 ASCIIToUTF16("postal_code_number"),
239 ASCIIToUTF16("sorting_code"),
240 ASCIIToUTF16("phone_number"),
241 "id1",
242 "language_code");
243 // Same as address1, only id is different.
244 Address address2("US",
245 ASCIIToUTF16("recipient_name"),
246 StreetAddress("address_line_1", "address_line_2"),
247 ASCIIToUTF16("locality_name"),
248 ASCIIToUTF16("dependent_locality_name"),
249 ASCIIToUTF16("administrative_area_name"),
250 ASCIIToUTF16("postal_code_number"),
251 ASCIIToUTF16("sorting_code"),
252 ASCIIToUTF16("phone_number"),
253 "id2",
254 "language_code");
255 // Has same id as address1, but name is different.
256 Address address3("US",
257 ASCIIToUTF16("a_different_name"),
258 StreetAddress("address_line_1", "address_line_2"),
259 ASCIIToUTF16("locality_name"),
260 ASCIIToUTF16("dependent_locality_name"),
261 ASCIIToUTF16("administrative_area_name"),
262 ASCIIToUTF16("phone_number"),
263 ASCIIToUTF16("postal_code_number"),
264 ASCIIToUTF16("sorting_code"),
265 "id1",
266 "language_code");
267 // Same as address1, but no id.
268 Address address4("US",
269 ASCIIToUTF16("recipient_name"),
270 StreetAddress("address_line_1", "address_line_2"),
271 ASCIIToUTF16("locality_name"),
272 ASCIIToUTF16("dependent_locality_name"),
273 ASCIIToUTF16("administrative_area_name"),
274 ASCIIToUTF16("postal_code_number"),
275 ASCIIToUTF16("sorting_code"),
276 ASCIIToUTF16("phone_number"),
277 std::string(),
278 "language_code");
279 // Same as address1, only language code is different.
280 Address address5("US",
281 ASCIIToUTF16("recipient_name"),
282 StreetAddress("address_line_1", "address_line_2"),
283 ASCIIToUTF16("locality_name"),
284 ASCIIToUTF16("dependent_locality_name"),
285 ASCIIToUTF16("administrative_area_name"),
286 ASCIIToUTF16("postal_code_number"),
287 ASCIIToUTF16("sorting_code"),
288 ASCIIToUTF16("phone_number"),
289 "id1",
290 "other_language_code");
292 // Compare the address has id field to itself.
293 EXPECT_EQ(address1, address1);
294 EXPECT_TRUE(address1.EqualsIgnoreID(address1));
296 // Compare the address has no id field to itself
297 EXPECT_EQ(address4, address4);
298 EXPECT_TRUE(address4.EqualsIgnoreID(address4));
300 // Compare two addresses with different id.
301 EXPECT_NE(address1, address2);
302 EXPECT_TRUE(address1.EqualsIgnoreID(address2));
303 EXPECT_TRUE(address2.EqualsIgnoreID(address1));
305 // Compare two different addresses.
306 EXPECT_NE(address1, address3);
307 EXPECT_FALSE(address1.EqualsIgnoreID(address3));
308 EXPECT_FALSE(address3.EqualsIgnoreID(address1));
310 // Compare two same addresses, one has id, the other doesn't.
311 EXPECT_NE(address1, address4);
312 EXPECT_TRUE(address1.EqualsIgnoreID(address4));
313 EXPECT_TRUE(address4.EqualsIgnoreID(address1));
315 // Compare two addresses with different language code.
316 EXPECT_NE(address1, address5);
317 EXPECT_TRUE(address1.EqualsIgnoreID(address5));
318 EXPECT_TRUE(address5.EqualsIgnoreID(address1));
321 TEST_F(WalletAddressTest, CreateAddressMissingObjectId) {
322 SetUpDictionary(kAddressMissingObjectId);
323 Address address("US",
324 ASCIIToUTF16("recipient_name"),
325 StreetAddress("address_line_1", "address_line_2"),
326 ASCIIToUTF16("locality_name"),
327 ASCIIToUTF16("dependent_locality_name"),
328 ASCIIToUTF16("administrative_area_name"),
329 ASCIIToUTF16("postal_code_number"),
330 ASCIIToUTF16("sorting_code"),
331 ASCIIToUTF16("phone_number"),
332 std::string(),
333 "language_code");
334 EXPECT_EQ(address, *Address::CreateAddress(*dict_));
337 TEST_F(WalletAddressTest, CreateAddressWithIDMissingObjectId) {
338 SetUpDictionary(kAddressMissingObjectId);
339 EXPECT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
342 TEST_F(WalletAddressTest, CreateAddressMissingCountryNameCode) {
343 SetUpDictionary(kAddressMissingCountryNameCode);
344 EXPECT_EQ(NULL, Address::CreateAddress(*dict_).get());
345 EXPECT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
348 TEST_F(WalletAddressTest, CreateAddressMissingRecipientName) {
349 SetUpDictionary(kAddressMissingRecipientName);
350 EXPECT_EQ(NULL, Address::CreateAddress(*dict_).get());
351 EXPECT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
354 TEST_F(WalletAddressTest, CreateAddressMissingPostalCodeNumber) {
355 SetUpDictionary(kAddressMissingPostalCodeNumber);
356 EXPECT_EQ(NULL, Address::CreateAddress(*dict_).get());
357 EXPECT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
360 TEST_F(WalletAddressTest, CreateAddressMissingLanguageCode) {
361 SetUpDictionary(kAddressMissingLanguageCode);
362 Address address("US",
363 ASCIIToUTF16("recipient_name"),
364 StreetAddress("address_line_1", "address_line_2"),
365 ASCIIToUTF16("locality_name"),
366 ASCIIToUTF16("dependent_locality_name"),
367 ASCIIToUTF16("administrative_area_name"),
368 ASCIIToUTF16("postal_code_number"),
369 ASCIIToUTF16("sorting_code"),
370 ASCIIToUTF16("phone_number"),
371 "id",
372 std::string());
373 address.set_is_complete_address(false);
374 EXPECT_EQ(address, *Address::CreateAddress(*dict_));
375 EXPECT_EQ(address, *Address::CreateAddressWithID(*dict_));
378 TEST_F(WalletAddressTest, CreateAddressWithID) {
379 SetUpDictionary(kValidAddress);
380 Address address("US",
381 ASCIIToUTF16("recipient_name"),
382 StreetAddress("address_line_1", "address_line_2"),
383 ASCIIToUTF16("locality_name"),
384 ASCIIToUTF16("dependent_locality_name"),
385 ASCIIToUTF16("administrative_area_name"),
386 ASCIIToUTF16("postal_code_number"),
387 ASCIIToUTF16("sorting_code"),
388 ASCIIToUTF16("phone_number"),
389 "id",
390 "language_code");
391 address.set_is_complete_address(false);
392 EXPECT_EQ(address, *Address::CreateAddress(*dict_));
393 EXPECT_EQ(address, *Address::CreateAddressWithID(*dict_));
396 TEST_F(WalletAddressTest, CreateDisplayAddressMissingCountryNameCode) {
397 SetUpDictionary(kClientAddressMissingCountryCode);
398 EXPECT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
401 TEST_F(WalletAddressTest, CreateDisplayAddressMissingName) {
402 SetUpDictionary(kClientAddressMissingName);
403 EXPECT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
406 TEST_F(WalletAddressTest, CreateDisplayAddressMissingPostalCode) {
407 SetUpDictionary(kClientAddressMissingPostalCode);
408 EXPECT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
411 TEST_F(WalletAddressTest, CreateDisplayAddressMissingLanguageCode) {
412 SetUpDictionary(kClientAddressMissingLanguageCode);
413 Address address("US",
414 ASCIIToUTF16("name"),
415 StreetAddress("address1", "address2"),
416 ASCIIToUTF16("city"),
417 ASCIIToUTF16("district"),
418 ASCIIToUTF16("state"),
419 ASCIIToUTF16("postal_code"),
420 ASCIIToUTF16("sorting_code"),
421 ASCIIToUTF16("phone_number"),
422 std::string(),
423 std::string());
424 EXPECT_EQ(address, *Address::CreateDisplayAddress(*dict_));
427 TEST_F(WalletAddressTest, CreateDisplayAddress) {
428 SetUpDictionary(kClientValidAddress);
429 Address address("US",
430 ASCIIToUTF16("name"),
431 StreetAddress("address1", "address2"),
432 ASCIIToUTF16("city"),
433 ASCIIToUTF16("district"),
434 ASCIIToUTF16("state"),
435 ASCIIToUTF16("postal_code"),
436 ASCIIToUTF16("sorting_code"),
437 ASCIIToUTF16("phone_number"),
438 std::string(),
439 "language_code");
440 EXPECT_EQ(address, *Address::CreateDisplayAddress(*dict_));
443 TEST_F(WalletAddressTest, ToDictionaryWithoutID) {
444 base::DictionaryValue expected;
445 expected.SetString("country_name_code",
446 "US");
447 expected.SetString("recipient_name",
448 "recipient_name");
449 expected.SetString("locality_name",
450 "locality_name");
451 expected.SetString("dependent_locality_name",
452 "dependent_locality_name");
453 expected.SetString("administrative_area_name",
454 "administrative_area_name");
455 expected.SetString("postal_code_number",
456 "postal_code_number");
457 expected.SetString("sorting_code",
458 "sorting_code");
459 expected.SetString("language_code",
460 "language_code");
461 base::ListValue* address_lines = new base::ListValue();
462 address_lines->AppendString("address_line_1");
463 address_lines->AppendString("address_line_2");
464 expected.Set("address_line", address_lines);
466 Address address("US",
467 ASCIIToUTF16("recipient_name"),
468 StreetAddress("address_line_1", "address_line_2"),
469 ASCIIToUTF16("locality_name"),
470 ASCIIToUTF16("dependent_locality_name"),
471 ASCIIToUTF16("administrative_area_name"),
472 ASCIIToUTF16("postal_code_number"),
473 ASCIIToUTF16("sorting_code"),
474 ASCIIToUTF16("phone_number"),
475 std::string(),
476 "language_code");
478 EXPECT_TRUE(expected.Equals(address.ToDictionaryWithoutID().get()));
481 TEST_F(WalletAddressTest, ToDictionaryWithID) {
482 base::DictionaryValue expected;
483 expected.SetString("id", "id");
484 expected.SetString("phone_number", "phone_number");
485 expected.SetString("postal_address.country_name_code",
486 "US");
487 expected.SetString("postal_address.recipient_name",
488 "recipient_name");
489 expected.SetString("postal_address.locality_name",
490 "locality_name");
491 expected.SetString("postal_address.dependent_locality_name",
492 "dependent_locality_name");
493 expected.SetString("postal_address.administrative_area_name",
494 "administrative_area_name");
495 expected.SetString("postal_address.postal_code_number",
496 "postal_code_number");
497 expected.SetString("postal_address.sorting_code",
498 "sorting_code");
499 expected.SetString("postal_address.language_code",
500 "language_code");
501 base::ListValue* address_lines = new base::ListValue();
502 address_lines->AppendString("address_line_1");
503 address_lines->AppendString("address_line_2");
504 expected.Set("postal_address.address_line", address_lines);
506 Address address("US",
507 ASCIIToUTF16("recipient_name"),
508 StreetAddress("address_line_1", "address_line_2"),
509 ASCIIToUTF16("locality_name"),
510 ASCIIToUTF16("dependent_locality_name"),
511 ASCIIToUTF16("administrative_area_name"),
512 ASCIIToUTF16("postal_code_number"),
513 ASCIIToUTF16("sorting_code"),
514 ASCIIToUTF16("phone_number"),
515 "id",
516 "language_code");
518 EXPECT_TRUE(expected.Equals(address.ToDictionaryWithID().get()));
521 // Verifies that WalletAddress::GetInfo() can correctly return both country
522 // codes and localized country names.
523 TEST_F(WalletAddressTest, GetCountryInfo) {
524 Address address("FR",
525 ASCIIToUTF16("recipient_name"),
526 StreetAddress("address_line_1", "address_line_2"),
527 ASCIIToUTF16("locality_name"),
528 ASCIIToUTF16("dependent_locality_name"),
529 ASCIIToUTF16("administrative_area_name"),
530 ASCIIToUTF16("postal_code_number"),
531 ASCIIToUTF16("sorting_code"),
532 ASCIIToUTF16("phone_number"),
533 "id1",
534 "language_code");
536 AutofillType type = AutofillType(HTML_TYPE_COUNTRY_CODE, HTML_MODE_NONE);
537 EXPECT_EQ(ASCIIToUTF16("FR"), address.GetInfo(type, "en-US"));
539 type = AutofillType(HTML_TYPE_COUNTRY_NAME, HTML_MODE_NONE);
540 EXPECT_EQ(ASCIIToUTF16("France"), address.GetInfo(type, "en-US"));
542 type = AutofillType(ADDRESS_HOME_COUNTRY);
543 EXPECT_EQ(ASCIIToUTF16("France"), address.GetInfo(type, "en-US"));
546 // Verifies that WalletAddress::GetInfo() can correctly return a concatenated
547 // full street address.
548 TEST_F(WalletAddressTest, GetStreetAddress) {
549 std::vector<base::string16> street_address = StreetAddress(
550 "address_line_1", "address_line_2");
551 // Address has both lines 1 and 2.
552 Address address1("FR",
553 ASCIIToUTF16("recipient_name"),
554 street_address,
555 ASCIIToUTF16("locality_name"),
556 ASCIIToUTF16("dependent_locality_name"),
557 ASCIIToUTF16("administrative_area_name"),
558 ASCIIToUTF16("postal_code_number"),
559 ASCIIToUTF16("sorting_code"),
560 ASCIIToUTF16("phone_number"),
561 "id1",
562 "language_code");
563 AutofillType type = AutofillType(HTML_TYPE_STREET_ADDRESS, HTML_MODE_NONE);
564 EXPECT_EQ(ASCIIToUTF16("address_line_1\naddress_line_2"),
565 address1.GetInfo(type, "en-US"));
567 // Address has only line 1.
568 street_address.resize(1);
569 Address address2("FR",
570 ASCIIToUTF16("recipient_name"),
571 street_address,
572 ASCIIToUTF16("locality_name"),
573 ASCIIToUTF16("dependent_locality_name"),
574 ASCIIToUTF16("administrative_area_name"),
575 ASCIIToUTF16("postal_code_number"),
576 ASCIIToUTF16("sorting_code"),
577 ASCIIToUTF16("phone_number"),
578 "id1",
579 "language_code");
580 EXPECT_EQ(ASCIIToUTF16("address_line_1"), address2.GetInfo(type, "en-US"));
582 // Address has no address lines.
583 street_address.clear();
584 Address address3("FR",
585 ASCIIToUTF16("recipient_name"),
586 street_address,
587 ASCIIToUTF16("locality_name"),
588 ASCIIToUTF16("dependent_locality_name"),
589 ASCIIToUTF16("administrative_area_name"),
590 ASCIIToUTF16("postal_code_number"),
591 ASCIIToUTF16("sorting_code"),
592 ASCIIToUTF16("phone_number"),
593 "id1",
594 "language_code");
595 EXPECT_EQ(base::string16(), address3.GetInfo(type, "en-US"));
598 } // namespace wallet
599 } // namespace autofill