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