OLD | NEW |
| (Empty) |
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_code governing permissions and | |
13 // limitations under the License. | |
14 | |
15 #include <libaddressinput/address_formatter.h> | |
16 | |
17 #include <libaddressinput/address_data.h> | |
18 | |
19 #include <string> | |
20 #include <vector> | |
21 | |
22 #include <gtest/gtest.h> | |
23 | |
24 namespace { | |
25 | |
26 using i18n::addressinput::AddressData; | |
27 using i18n::addressinput::GetFormattedNationalAddress; | |
28 using i18n::addressinput::GetFormattedNationalAddressLine; | |
29 using i18n::addressinput::GetStreetAddressLinesAsSingleLine; | |
30 | |
31 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_1Line) { | |
32 AddressData address; | |
33 address.region_code = "US"; // Not used. | |
34 address.address_line.push_back("Line 1"); | |
35 | |
36 std::string result; | |
37 GetStreetAddressLinesAsSingleLine(address, &result); | |
38 EXPECT_EQ("Line 1", result); | |
39 | |
40 // Setting the language_code, with one line, shouldn't affect anything. | |
41 address.language_code = "en"; | |
42 GetStreetAddressLinesAsSingleLine(address, &result); | |
43 EXPECT_EQ("Line 1", result); | |
44 | |
45 address.language_code = "zh-Hans"; | |
46 GetStreetAddressLinesAsSingleLine(address, &result); | |
47 EXPECT_EQ("Line 1", result); | |
48 } | |
49 | |
50 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_2Lines) { | |
51 AddressData address; | |
52 address.region_code = "US"; // Not used. | |
53 address.address_line.push_back("Line 1"); | |
54 address.address_line.push_back("Line 2"); | |
55 | |
56 std::string result; | |
57 GetStreetAddressLinesAsSingleLine(address, &result); | |
58 // Default separator if no language_code specified: ", " | |
59 EXPECT_EQ("Line 1, Line 2", result); | |
60 | |
61 address.language_code = "en"; | |
62 GetStreetAddressLinesAsSingleLine(address, &result); | |
63 EXPECT_EQ("Line 1, Line 2", result); | |
64 | |
65 address.language_code = "zh-Hans"; | |
66 GetStreetAddressLinesAsSingleLine(address, &result); | |
67 // Chinese has no separator. | |
68 EXPECT_EQ("Line 1Line 2", result); | |
69 | |
70 address.language_code = "ko"; | |
71 GetStreetAddressLinesAsSingleLine(address, &result); | |
72 EXPECT_EQ("Line 1 Line 2", result); | |
73 | |
74 address.language_code = "ar"; | |
75 GetStreetAddressLinesAsSingleLine(address, &result); | |
76 EXPECT_EQ("Line 1\xD8\x8C" " Line 2", result); // Arabic comma. | |
77 } | |
78 | |
79 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_5Lines) { | |
80 AddressData address; | |
81 address.region_code = "US"; // Not used. | |
82 address.address_line.push_back("Line 1"); | |
83 address.address_line.push_back("Line 2"); | |
84 address.address_line.push_back("Line 3"); | |
85 address.address_line.push_back("Line 4"); | |
86 address.address_line.push_back("Line 5"); | |
87 address.language_code = "fr"; | |
88 | |
89 std::string result; | |
90 GetStreetAddressLinesAsSingleLine(address, &result); | |
91 EXPECT_EQ(result, "Line 1, Line 2, Line 3, Line 4, Line 5"); | |
92 } | |
93 | |
94 TEST(AddressFormatterTest, GetFormattedNationalAddressLocalLanguage) { | |
95 AddressData address; | |
96 address.region_code = "NZ"; | |
97 address.address_line.push_back("Rotopapa"); | |
98 address.address_line.push_back("Irwell 3RD"); | |
99 address.postal_code = "8704"; | |
100 address.locality = "Leeston"; | |
101 | |
102 std::vector<std::string> expected; | |
103 expected.push_back("Rotopapa"); | |
104 expected.push_back("Irwell 3RD"); | |
105 expected.push_back("Leeston 8704"); | |
106 | |
107 std::vector<std::string> lines; | |
108 GetFormattedNationalAddress(address, &lines); | |
109 EXPECT_EQ(expected, lines); | |
110 | |
111 // Should be the same result no matter what the language_code is. We choose an | |
112 // unlikely language_code code to illustrate this. | |
113 address.language_code = "en-Latn-CN"; | |
114 | |
115 lines.clear(); | |
116 GetFormattedNationalAddress(address, &lines); | |
117 EXPECT_EQ(expected, lines); | |
118 | |
119 std::string one_line; | |
120 GetFormattedNationalAddressLine(address, &one_line); | |
121 EXPECT_EQ("Rotopapa, Irwell 3RD, Leeston 8704", one_line); | |
122 } | |
123 | |
124 TEST(AddressFormatterTest, GetFormattedNationalAddressLatinFormat) { | |
125 /* 大安區 */ | |
126 static const char kTaiwanCity[] = "\xE5\xA4\xA7\xE5\xAE\x89\xE5\x8D\x80"; | |
127 /* 台北市 */ | |
128 static const char kTaiwanAdmin[] = "\xE5\x8F\xB0\xE5\x8C\x97\xE5\xB8\x82"; | |
129 /* 台灣信義路三段33號 */ | |
130 static const char kTaiwanStreetLine[]= "\xE5\x8F\xB0\xE7\x81\xA3\xE4\xBF\xA1" | |
131 "\xE7\xBE\xA9\xE8\xB7\xAF\xE4\xB8\x89\xE6\xAE\xB5" "33" "\xE8\x99\x9F"; | |
132 static const char kPostalCode[] = "106"; | |
133 | |
134 AddressData address; | |
135 address.region_code = "TW"; | |
136 address.address_line.push_back(kTaiwanStreetLine); | |
137 address.postal_code = kPostalCode; | |
138 address.locality = kTaiwanCity; | |
139 address.administrative_area = kTaiwanAdmin; | |
140 address.language_code = "zh-Hant"; | |
141 | |
142 std::vector<std::string> expected; | |
143 expected.push_back(kPostalCode); | |
144 expected.push_back(std::string(kTaiwanAdmin).append(kTaiwanCity)); | |
145 expected.push_back(kTaiwanStreetLine); | |
146 | |
147 std::vector<std::string> lines; | |
148 GetFormattedNationalAddress(address, &lines); | |
149 EXPECT_EQ(expected, lines); | |
150 | |
151 std::string one_line; | |
152 GetFormattedNationalAddressLine(address, &one_line); | |
153 // No separators expected for Chinese. | |
154 EXPECT_EQ(std::string(kPostalCode).append(kTaiwanAdmin).append(kTaiwanCity) | |
155 .append(kTaiwanStreetLine), | |
156 one_line); | |
157 | |
158 // Changing to the latin variant will change the output. | |
159 AddressData latin_address; | |
160 latin_address.region_code = "TW"; | |
161 latin_address.address_line.push_back("No. 33, Section 3 Xinyi Rd"); | |
162 latin_address.postal_code = kPostalCode; | |
163 latin_address.locality = "Da-an District"; | |
164 latin_address.administrative_area = "Taipei City"; | |
165 latin_address.language_code = "zh-Latn"; | |
166 | |
167 std::vector<std::string> expected_latin; | |
168 expected_latin.push_back("No. 33, Section 3 Xinyi Rd"); | |
169 expected_latin.push_back("Da-an District, Taipei City 106"); | |
170 | |
171 lines.clear(); | |
172 GetFormattedNationalAddress(latin_address, &lines); | |
173 EXPECT_EQ(expected_latin, lines); | |
174 | |
175 GetFormattedNationalAddressLine(latin_address, &one_line); | |
176 // We expect ", " as the new-line replacements for zh-Latn. | |
177 EXPECT_EQ("No. 33, Section 3 Xinyi Rd, Da-an District, Taipei City 106", | |
178 one_line); | |
179 } | |
180 | |
181 TEST(AddressFormatterTest, GetFormattedNationalAddressMultilingualCountry) { | |
182 AddressData address; | |
183 address.region_code = "CA"; | |
184 address.address_line.push_back("5 Rue du Tresor"); | |
185 address.address_line.push_back("Apt. 4"); | |
186 address.administrative_area = "QC"; | |
187 address.postal_code = "G1R 123"; | |
188 address.locality = "Montmagny"; | |
189 address.language_code = "fr"; | |
190 | |
191 std::vector<std::string> expected; | |
192 expected.push_back("5 Rue du Tresor"); | |
193 expected.push_back("Apt. 4"); | |
194 expected.push_back("Montmagny QC G1R 123"); | |
195 | |
196 std::vector<std::string> lines; | |
197 GetFormattedNationalAddress(address, &lines); | |
198 EXPECT_EQ(expected, lines); | |
199 } | |
200 | |
201 } // namespace | |
OLD | NEW |