1// Copyright (C) 2014 Google Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include <libaddressinput/address_data.h>
16
17#include <string>
18#include <vector>
19
20#include <gtest/gtest.h>
21
22namespace {
23
24using i18n::addressinput::AddressData;
25
26TEST(AddressDataTest, FormatForDisplayEmpty) {
27  AddressData address;
28  std::vector<std::string> actual;
29  address.FormatForDisplay(&actual);
30  EXPECT_EQ(std::vector<std::string>(), actual);
31}
32
33TEST(AddressDataTest, FormatForDisplayUs) {
34  AddressData address;
35  address.country_code = "US";
36  address.administrative_area = "Texas";
37  address.locality = "Houston";
38  address.postal_code = "77005";
39  address.address_lines.push_back("123 Main St");
40  address.address_lines.push_back("Apt 2");
41  address.organization = "ACME Corp.";
42  address.recipient = "John Doe";
43
44  std::vector<std::string> actual;
45  address.FormatForDisplay(&actual);
46
47  std::vector<std::string> expected;
48  expected.push_back(address.recipient);
49  expected.push_back(address.organization);
50  expected.insert(expected.end(),
51                  address.address_lines.begin(),
52                  address.address_lines.end());
53  expected.push_back(address.locality + ", " + address.administrative_area +
54                     " " + address.postal_code);
55
56  EXPECT_EQ(expected, actual);
57}
58
59TEST(AddressDataTest, FormatForDisplayAr) {
60  AddressData address;
61  address.country_code = "AR";
62  address.administrative_area = "Capital Federal";
63  address.locality = "Buenos Aires";
64  address.postal_code = "C1001AFB";
65  address.address_lines.push_back("Su Calle 123");
66  address.address_lines.push_back("5° Piso");
67  address.organization = "Empresa Ejemplo";
68  address.recipient = "Juan Perez";
69
70  std::vector<std::string> actual;
71  address.FormatForDisplay(&actual);
72
73  std::vector<std::string> expected;
74  expected.push_back(address.recipient);
75  expected.push_back(address.organization);
76  expected.insert(expected.end(),
77                  address.address_lines.begin(),
78                  address.address_lines.end());
79  expected.push_back(address.postal_code + " " + address.locality);
80  expected.push_back(address.administrative_area);
81
82  EXPECT_EQ(expected, actual);
83}
84
85TEST(AddressDataTest, FormatForDisplayJp) {
86  AddressData address;
87  address.country_code = "JP";
88  address.language_code = "ja";
89  address.administrative_area = "東京都";
90  address.locality = "渋谷区";
91  address.postal_code = "150-8512";
92  address.address_lines.push_back("桜丘町26-1");
93  address.address_lines.push_back("セルリアンタワー6階");
94  address.organization = "グーグル株式会社";
95  address.recipient = "村上 美紀";
96
97  std::vector<std::string> actual;
98  address.FormatForDisplay(&actual);
99
100  std::vector<std::string> expected;
101  expected.push_back("〒" + address.postal_code);
102  expected.push_back(address.administrative_area + address.locality);
103  expected.insert(expected.end(),
104                  address.address_lines.begin(),
105                  address.address_lines.end());
106  expected.push_back(address.organization);
107  expected.push_back(address.recipient);
108
109  EXPECT_EQ(expected, actual);
110}
111
112TEST(AddressDataTest, FormatForDisplayJpLatn) {
113  AddressData address;
114  address.country_code = "JP";
115  address.language_code = "ja-latn";
116  address.administrative_area = "Tokyo";
117  address.locality = "Shibuya-ku";
118  address.postal_code = "150-8512";
119  address.address_lines.push_back("26-1 Sakuragaoka-cho");
120  address.address_lines.push_back("Cerulean Tower 6F");
121  address.organization = "Google Japan Inc.";
122  address.recipient = "Miki Murakami";
123
124  std::vector<std::string> actual;
125  address.FormatForDisplay(&actual);
126
127  std::vector<std::string> expected;
128  expected.push_back(address.recipient);
129  expected.push_back(address.organization);
130  expected.insert(expected.end(),
131                  address.address_lines.begin(),
132                  address.address_lines.end());
133  expected.push_back(address.locality + ", "+ address.administrative_area);
134  expected.push_back(address.postal_code);
135
136  EXPECT_EQ(expected, actual);
137}
138
139TEST(AddressDataTest, FormatForDisplayJpLatnCapitalized) {
140  AddressData address;
141  address.country_code = "JP";
142  address.language_code = "ja-Latn";
143  address.administrative_area = "Tokyo";
144  address.locality = "Shibuya-ku";
145  address.postal_code = "150-8512";
146  address.address_lines.push_back("26-1 Sakuragaoka-cho");
147  address.address_lines.push_back("Cerulean Tower 6F");
148  address.organization = "Google Japan Inc.";
149  address.recipient = "Miki Murakami";
150
151  std::vector<std::string> actual;
152  address.FormatForDisplay(&actual);
153
154  std::vector<std::string> expected;
155  expected.push_back(address.recipient);
156  expected.push_back(address.organization);
157  expected.insert(expected.end(),
158                  address.address_lines.begin(),
159                  address.address_lines.end());
160  expected.push_back(address.locality + ", "+ address.administrative_area);
161  expected.push_back(address.postal_code);
162
163  EXPECT_EQ(expected, actual);
164}
165
166TEST(AddressDataTest, FormatForDisplayJpLatnUs) {
167  AddressData address;
168  address.country_code = "JP";
169  address.language_code = "ja-latn-US";
170  address.administrative_area = "Tokyo";
171  address.locality = "Shibuya-ku";
172  address.postal_code = "150-8512";
173  address.address_lines.push_back("26-1 Sakuragaoka-cho");
174  address.address_lines.push_back("Cerulean Tower 6F");
175  address.organization = "Google Japan Inc.";
176  address.recipient = "Miki Murakami";
177
178  std::vector<std::string> actual;
179  address.FormatForDisplay(&actual);
180
181  std::vector<std::string> expected;
182  expected.push_back(address.recipient);
183  expected.push_back(address.organization);
184  expected.insert(expected.end(),
185                  address.address_lines.begin(),
186                  address.address_lines.end());
187  expected.push_back(address.locality + ", "+ address.administrative_area);
188  expected.push_back(address.postal_code);
189
190  EXPECT_EQ(expected, actual);
191}
192
193TEST(AddressDataTest, FormatForDisplayWithStreetCi) {
194  AddressData address;
195  address.country_code = "CI";
196  address.address_lines.push_back("Street Line 1");
197  address.locality = "City Name";
198  address.sorting_code = "123CEDEX";
199
200  std::vector<std::string> actual;
201  address.FormatForDisplay(&actual);
202
203  std::vector<std::string> expected(
204      1,
205      address.sorting_code + " " +
206          address.address_lines[0] + " " +
207          address.locality + " " +
208          address.sorting_code);
209
210  EXPECT_EQ(expected, actual);
211}
212
213TEST(AddressDataTest, FormatForDisplayWithoutStreetCi) {
214  AddressData address;
215  address.country_code = "CI";
216  address.locality = "City Name";
217  address.sorting_code = "123CEDEX";
218
219  std::vector<std::string> actual;
220  address.FormatForDisplay(&actual);
221
222  std::vector<std::string> expected(
223      1,
224      address.sorting_code + "  " +
225          address.locality + " " +
226          address.sorting_code);
227
228  EXPECT_EQ(expected, actual);
229}
230
231}  // namespace
232