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, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 virtual ~AddressValidatorTest() {} | 51 virtual ~AddressValidatorTest() {} |
52 | 52 |
53 protected: | 53 protected: |
54 scoped_ptr<AddressValidator> validator_; | 54 scoped_ptr<AddressValidator> validator_; |
55 | 55 |
56 private: | 56 private: |
57 // LoadRulesDelegate implementation. | 57 // LoadRulesDelegate implementation. |
58 virtual void OnAddressValidationRulesLoaded(const std::string& country_code, | 58 virtual void OnAddressValidationRulesLoaded(const std::string& country_code, |
59 bool success) { | 59 bool success) { |
60 AddressData address_data; | 60 AddressData address_data; |
61 address_data.country_code = country_code; | 61 address_data.region_code = country_code; |
62 AddressValidator::Status status = | 62 AddressValidator::Status status = |
63 validator_->ValidateAddress(address_data, AddressProblemFilter(), NULL); | 63 validator_->ValidateAddress(address_data, AddressProblemFilter(), NULL); |
64 EXPECT_EQ(success, status == AddressValidator::SUCCESS); | 64 EXPECT_EQ(success, status == AddressValidator::SUCCESS); |
65 } | 65 } |
66 }; | 66 }; |
67 | 67 |
68 TEST_F(AddressValidatorTest, RegionHasRules) { | 68 TEST_F(AddressValidatorTest, RegionHasRules) { |
69 const std::vector<std::string>& region_codes = | 69 const std::vector<std::string>& region_codes = |
70 RegionDataConstants::GetRegionCodes(); | 70 RegionDataConstants::GetRegionCodes(); |
71 AddressData address; | 71 AddressData address; |
72 for (size_t i = 0; i < region_codes.size(); ++i) { | 72 for (size_t i = 0; i < region_codes.size(); ++i) { |
73 SCOPED_TRACE("For region: " + region_codes[i]); | 73 SCOPED_TRACE("For region: " + region_codes[i]); |
74 validator_->LoadRules(region_codes[i]); | 74 validator_->LoadRules(region_codes[i]); |
75 address.country_code = region_codes[i]; | 75 address.region_code = region_codes[i]; |
76 EXPECT_EQ( | 76 EXPECT_EQ( |
77 AddressValidator::SUCCESS, | 77 AddressValidator::SUCCESS, |
78 validator_->ValidateAddress(address, AddressProblemFilter(), NULL)); | 78 validator_->ValidateAddress(address, AddressProblemFilter(), NULL)); |
79 } | 79 } |
80 } | 80 } |
81 | 81 |
82 TEST_F(AddressValidatorTest, EmptyAddressNoFatalFailure) { | 82 TEST_F(AddressValidatorTest, EmptyAddressNoFatalFailure) { |
83 AddressData address; | 83 AddressData address; |
84 address.country_code = "US"; | 84 address.region_code = "US"; |
85 | 85 |
86 AddressProblems problems; | 86 AddressProblems problems; |
87 EXPECT_EQ( | 87 EXPECT_EQ( |
88 AddressValidator::SUCCESS, | 88 AddressValidator::SUCCESS, |
89 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 89 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
90 } | 90 } |
91 | 91 |
92 TEST_F(AddressValidatorTest, USZipCode) { | 92 TEST_F(AddressValidatorTest, USZipCode) { |
93 AddressData address; | 93 AddressData address; |
94 address.address_lines.push_back("340 Main St."); | 94 address.address_line.push_back("340 Main St."); |
95 address.locality = "Venice"; | 95 address.locality = "Venice"; |
96 address.administrative_area = "CA"; | 96 address.administrative_area = "CA"; |
97 address.country_code = "US"; | 97 address.region_code = "US"; |
98 | 98 |
99 // Valid Californian zip code. | 99 // Valid Californian zip code. |
100 address.postal_code = "90291"; | 100 address.postal_code = "90291"; |
101 AddressProblems problems; | 101 AddressProblems problems; |
102 EXPECT_EQ( | 102 EXPECT_EQ( |
103 AddressValidator::SUCCESS, | 103 AddressValidator::SUCCESS, |
104 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 104 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
105 EXPECT_TRUE(problems.empty()); | 105 EXPECT_TRUE(problems.empty()); |
106 | 106 |
107 problems.clear(); | 107 problems.clear(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 155 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
156 EXPECT_EQ(1U, problems.size()); | 156 EXPECT_EQ(1U, problems.size()); |
157 EXPECT_EQ(problems[0].field, POSTAL_CODE); | 157 EXPECT_EQ(problems[0].field, POSTAL_CODE); |
158 EXPECT_EQ(problems[0].type, AddressProblem::UNRECOGNIZED_FORMAT); | 158 EXPECT_EQ(problems[0].type, AddressProblem::UNRECOGNIZED_FORMAT); |
159 } | 159 } |
160 | 160 |
161 TEST_F(AddressValidatorTest, BasicValidation) { | 161 TEST_F(AddressValidatorTest, BasicValidation) { |
162 // US rules should always be available, even though this load call fails. | 162 // US rules should always be available, even though this load call fails. |
163 validator_->LoadRules("US"); | 163 validator_->LoadRules("US"); |
164 AddressData address; | 164 AddressData address; |
165 address.country_code = "US"; | 165 address.region_code = "US"; |
166 address.language_code = "en"; | 166 address.language_code = "en"; |
167 address.administrative_area = "TX"; | 167 address.administrative_area = "TX"; |
168 address.locality = "Paris"; | 168 address.locality = "Paris"; |
169 address.postal_code = "75461"; | 169 address.postal_code = "75461"; |
170 address.address_lines.push_back("123 Main St"); | 170 address.address_line.push_back("123 Main St"); |
171 AddressProblems problems; | 171 AddressProblems problems; |
172 EXPECT_EQ( | 172 EXPECT_EQ( |
173 AddressValidator::SUCCESS, | 173 AddressValidator::SUCCESS, |
174 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 174 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
175 EXPECT_TRUE(problems.empty()); | 175 EXPECT_TRUE(problems.empty()); |
176 | 176 |
177 // The display name works as well as the key. | 177 // The display name works as well as the key. |
178 address.administrative_area = "Texas"; | 178 address.administrative_area = "Texas"; |
179 problems.clear(); | 179 problems.clear(); |
180 EXPECT_EQ( | 180 EXPECT_EQ( |
(...skipping 23 matching lines...) Expand all Loading... |
204 EXPECT_EQ( | 204 EXPECT_EQ( |
205 AddressValidator::SUCCESS, | 205 AddressValidator::SUCCESS, |
206 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 206 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
207 EXPECT_TRUE(problems.empty()); | 207 EXPECT_TRUE(problems.empty()); |
208 } | 208 } |
209 | 209 |
210 TEST_F(AddressValidatorTest, BasicValidationFailure) { | 210 TEST_F(AddressValidatorTest, BasicValidationFailure) { |
211 // US rules should always be available, even though this load call fails. | 211 // US rules should always be available, even though this load call fails. |
212 validator_->LoadRules("US"); | 212 validator_->LoadRules("US"); |
213 AddressData address; | 213 AddressData address; |
214 address.country_code = "US"; | 214 address.region_code = "US"; |
215 address.language_code = "en"; | 215 address.language_code = "en"; |
216 address.administrative_area = "XT"; | 216 address.administrative_area = "XT"; |
217 address.locality = "Paris"; | 217 address.locality = "Paris"; |
218 address.postal_code = "75461"; | 218 address.postal_code = "75461"; |
219 address.address_lines.push_back("123 Main St"); | 219 address.address_line.push_back("123 Main St"); |
220 AddressProblems problems; | 220 AddressProblems problems; |
221 EXPECT_EQ( | 221 EXPECT_EQ( |
222 AddressValidator::SUCCESS, | 222 AddressValidator::SUCCESS, |
223 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); | 223 validator_->ValidateAddress(address, AddressProblemFilter(), &problems)); |
224 | 224 |
225 ASSERT_EQ(1U, problems.size()); | 225 ASSERT_EQ(1U, problems.size()); |
226 EXPECT_EQ(AddressProblem::UNKNOWN_VALUE, problems[0].type); | 226 EXPECT_EQ(AddressProblem::UNKNOWN_VALUE, problems[0].type); |
227 EXPECT_EQ(ADMIN_AREA, problems[0].field); | 227 EXPECT_EQ(ADMIN_AREA, problems[0].field); |
228 } | 228 } |
229 | 229 |
230 TEST_F(AddressValidatorTest, NoNullSuggestionsCrash) { | 230 TEST_F(AddressValidatorTest, NoNullSuggestionsCrash) { |
231 AddressData address; | 231 AddressData address; |
232 address.country_code = "US"; | 232 address.region_code = "US"; |
233 EXPECT_EQ(AddressValidator::SUCCESS, | 233 EXPECT_EQ(AddressValidator::SUCCESS, |
234 validator_->GetSuggestions(address, COUNTRY, 1, NULL)); | 234 validator_->GetSuggestions(address, COUNTRY, 1, NULL)); |
235 } | 235 } |
236 | 236 |
237 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCode) { | 237 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCode) { |
238 AddressData address; | 238 AddressData address; |
239 address.country_code = "US"; | 239 address.region_code = "US"; |
240 address.postal_code = "90291"; | 240 address.postal_code = "90291"; |
241 | 241 |
242 std::vector<AddressData> suggestions; | 242 std::vector<AddressData> suggestions; |
243 EXPECT_EQ(AddressValidator::SUCCESS, | 243 EXPECT_EQ(AddressValidator::SUCCESS, |
244 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 244 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
245 ASSERT_EQ(1U, suggestions.size()); | 245 ASSERT_EQ(1U, suggestions.size()); |
246 EXPECT_EQ("CA", suggestions[0].administrative_area); | 246 EXPECT_EQ("CA", suggestions[0].administrative_area); |
247 EXPECT_EQ("90291", suggestions[0].postal_code); | 247 EXPECT_EQ("90291", suggestions[0].postal_code); |
248 } | 248 } |
249 | 249 |
250 TEST_F(AddressValidatorTest, SuggestLocalityForPostalCodeWithAdminArea) { | 250 TEST_F(AddressValidatorTest, SuggestLocalityForPostalCodeWithAdminArea) { |
251 validator_->LoadRules("TW"); | 251 validator_->LoadRules("TW"); |
252 AddressData address; | 252 AddressData address; |
253 address.country_code = "TW"; | 253 address.region_code = "TW"; |
254 address.postal_code = "515"; | 254 address.postal_code = "515"; |
255 address.administrative_area = "Changhua"; | 255 address.administrative_area = "Changhua"; |
256 | 256 |
257 std::vector<AddressData> suggestions; | 257 std::vector<AddressData> suggestions; |
258 EXPECT_EQ(AddressValidator::SUCCESS, | 258 EXPECT_EQ(AddressValidator::SUCCESS, |
259 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 259 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
260 ASSERT_EQ(1U, suggestions.size()); | 260 ASSERT_EQ(1U, suggestions.size()); |
261 EXPECT_EQ("Dacun Township", suggestions[0].locality); | 261 EXPECT_EQ("Dacun Township", suggestions[0].locality); |
262 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); | 262 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); |
263 EXPECT_EQ("515", suggestions[0].postal_code); | 263 EXPECT_EQ("515", suggestions[0].postal_code); |
264 } | 264 } |
265 | 265 |
266 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCodeWithLocality) { | 266 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCodeWithLocality) { |
267 validator_->LoadRules("TW"); | 267 validator_->LoadRules("TW"); |
268 AddressData address; | 268 AddressData address; |
269 address.country_code = "TW"; | 269 address.region_code = "TW"; |
270 address.postal_code = "515"; | 270 address.postal_code = "515"; |
271 address.locality = "Dacun"; | 271 address.locality = "Dacun"; |
272 | 272 |
273 std::vector<AddressData> suggestions; | 273 std::vector<AddressData> suggestions; |
274 EXPECT_EQ(AddressValidator::SUCCESS, | 274 EXPECT_EQ(AddressValidator::SUCCESS, |
275 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 275 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
276 ASSERT_EQ(1U, suggestions.size()); | 276 ASSERT_EQ(1U, suggestions.size()); |
277 EXPECT_EQ("Dacun Township", suggestions[0].locality); | 277 EXPECT_EQ("Dacun Township", suggestions[0].locality); |
278 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); | 278 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); |
279 EXPECT_EQ("515", suggestions[0].postal_code); | 279 EXPECT_EQ("515", suggestions[0].postal_code); |
280 } | 280 } |
281 | 281 |
282 TEST_F(AddressValidatorTest, NoSuggestForPostalCodeWithWrongAdminArea) { | 282 TEST_F(AddressValidatorTest, NoSuggestForPostalCodeWithWrongAdminArea) { |
283 AddressData address; | 283 AddressData address; |
284 address.country_code = "US"; | 284 address.region_code = "US"; |
285 address.postal_code = "90066"; | 285 address.postal_code = "90066"; |
286 address.postal_code = "TX"; | 286 address.postal_code = "TX"; |
287 | 287 |
288 std::vector<AddressData> suggestions; | 288 std::vector<AddressData> suggestions; |
289 EXPECT_EQ(AddressValidator::SUCCESS, | 289 EXPECT_EQ(AddressValidator::SUCCESS, |
290 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 290 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
291 EXPECT_TRUE(suggestions.empty()); | 291 EXPECT_TRUE(suggestions.empty()); |
292 } | 292 } |
293 | 293 |
294 TEST_F(AddressValidatorTest, SuggestForLocality) { | 294 TEST_F(AddressValidatorTest, SuggestForLocality) { |
295 validator_->LoadRules("CN"); | 295 validator_->LoadRules("CN"); |
296 AddressData address; | 296 AddressData address; |
297 address.country_code = "CN"; | 297 address.region_code = "CN"; |
298 address.locality = "Anqin"; | 298 address.locality = "Anqin"; |
299 | 299 |
300 std::vector<AddressData> suggestions; | 300 std::vector<AddressData> suggestions; |
301 EXPECT_EQ(AddressValidator::SUCCESS, | 301 EXPECT_EQ(AddressValidator::SUCCESS, |
302 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); | 302 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); |
303 ASSERT_EQ(1U, suggestions.size()); | 303 ASSERT_EQ(1U, suggestions.size()); |
304 EXPECT_EQ("Anqing Shi", suggestions[0].locality); | 304 EXPECT_EQ("Anqing Shi", suggestions[0].locality); |
305 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); | 305 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); |
306 } | 306 } |
307 | 307 |
308 TEST_F(AddressValidatorTest, SuggestForLocalityAndAdminArea) { | 308 TEST_F(AddressValidatorTest, SuggestForLocalityAndAdminArea) { |
309 validator_->LoadRules("CN"); | 309 validator_->LoadRules("CN"); |
310 AddressData address; | 310 AddressData address; |
311 address.country_code = "CN"; | 311 address.region_code = "CN"; |
312 address.locality = "Anqing"; | 312 address.locality = "Anqing"; |
313 address.administrative_area = "Anhui"; | 313 address.administrative_area = "Anhui"; |
314 | 314 |
315 std::vector<AddressData> suggestions; | 315 std::vector<AddressData> suggestions; |
316 EXPECT_EQ(AddressValidator::SUCCESS, | 316 EXPECT_EQ(AddressValidator::SUCCESS, |
317 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); | 317 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); |
318 ASSERT_EQ(1U, suggestions.size()); | 318 ASSERT_EQ(1U, suggestions.size()); |
319 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); | 319 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); |
320 EXPECT_EQ("Anqing Shi", suggestions[0].locality); | 320 EXPECT_EQ("Anqing Shi", suggestions[0].locality); |
321 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); | 321 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); |
322 } | 322 } |
323 | 323 |
324 TEST_F(AddressValidatorTest, SuggestForAdminAreaAndLocality) { | 324 TEST_F(AddressValidatorTest, SuggestForAdminAreaAndLocality) { |
325 validator_->LoadRules("CN"); | 325 validator_->LoadRules("CN"); |
326 AddressData address; | 326 AddressData address; |
327 address.country_code = "CN"; | 327 address.region_code = "CN"; |
328 address.locality = "Anqing"; | 328 address.locality = "Anqing"; |
329 address.administrative_area = "Anhui"; | 329 address.administrative_area = "Anhui"; |
330 | 330 |
331 std::vector<AddressData> suggestions; | 331 std::vector<AddressData> suggestions; |
332 EXPECT_EQ(AddressValidator::SUCCESS, | 332 EXPECT_EQ(AddressValidator::SUCCESS, |
333 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); | 333 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); |
334 ASSERT_EQ(1U, suggestions.size()); | 334 ASSERT_EQ(1U, suggestions.size()); |
335 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); | 335 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); |
336 EXPECT_TRUE(suggestions[0].locality.empty()); | 336 EXPECT_TRUE(suggestions[0].locality.empty()); |
337 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); | 337 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); |
338 } | 338 } |
339 | 339 |
340 TEST_F(AddressValidatorTest, SuggestForDependentLocality) { | 340 TEST_F(AddressValidatorTest, SuggestForDependentLocality) { |
341 validator_->LoadRules("CN"); | 341 validator_->LoadRules("CN"); |
342 AddressData address; | 342 AddressData address; |
343 address.country_code = "CN"; | 343 address.region_code = "CN"; |
344 address.dependent_locality = "Zongyang"; | 344 address.dependent_locality = "Zongyang"; |
345 | 345 |
346 std::vector<AddressData> suggestions; | 346 std::vector<AddressData> suggestions; |
347 EXPECT_EQ(AddressValidator::SUCCESS, | 347 EXPECT_EQ(AddressValidator::SUCCESS, |
348 validator_->GetSuggestions( | 348 validator_->GetSuggestions( |
349 address, DEPENDENT_LOCALITY, 10, &suggestions)); | 349 address, DEPENDENT_LOCALITY, 10, &suggestions)); |
350 ASSERT_EQ(1U, suggestions.size()); | 350 ASSERT_EQ(1U, suggestions.size()); |
351 EXPECT_EQ("Zongyang Xian", suggestions[0].dependent_locality); | 351 EXPECT_EQ("Zongyang Xian", suggestions[0].dependent_locality); |
352 EXPECT_EQ("Anqing Shi", suggestions[0].locality); | 352 EXPECT_EQ("Anqing Shi", suggestions[0].locality); |
353 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); | 353 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); |
354 } | 354 } |
355 | 355 |
356 TEST_F(AddressValidatorTest, | 356 TEST_F(AddressValidatorTest, |
357 NoSuggestForDependentLocalityWithWrongAdminArea) { | 357 NoSuggestForDependentLocalityWithWrongAdminArea) { |
358 validator_->LoadRules("CN"); | 358 validator_->LoadRules("CN"); |
359 AddressData address; | 359 AddressData address; |
360 address.country_code = "CN"; | 360 address.region_code = "CN"; |
361 address.dependent_locality = "Zongyang"; | 361 address.dependent_locality = "Zongyang"; |
362 address.administrative_area = "Sichuan Sheng"; | 362 address.administrative_area = "Sichuan Sheng"; |
363 | 363 |
364 std::vector<AddressData> suggestions; | 364 std::vector<AddressData> suggestions; |
365 EXPECT_EQ(AddressValidator::SUCCESS, | 365 EXPECT_EQ(AddressValidator::SUCCESS, |
366 validator_->GetSuggestions( | 366 validator_->GetSuggestions( |
367 address, DEPENDENT_LOCALITY, 10, &suggestions)); | 367 address, DEPENDENT_LOCALITY, 10, &suggestions)); |
368 EXPECT_TRUE(suggestions.empty()); | 368 EXPECT_TRUE(suggestions.empty()); |
369 } | 369 } |
370 | 370 |
371 TEST_F(AddressValidatorTest, EmptySuggestionsOverLimit) { | 371 TEST_F(AddressValidatorTest, EmptySuggestionsOverLimit) { |
372 AddressData address; | 372 AddressData address; |
373 address.country_code = "US"; | 373 address.region_code = "US"; |
374 address.administrative_area = "A"; | 374 address.administrative_area = "A"; |
375 | 375 |
376 std::vector<AddressData> suggestions; | 376 std::vector<AddressData> suggestions; |
377 EXPECT_EQ(AddressValidator::SUCCESS, | 377 EXPECT_EQ(AddressValidator::SUCCESS, |
378 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); | 378 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); |
379 EXPECT_TRUE(suggestions.empty()); | 379 EXPECT_TRUE(suggestions.empty()); |
380 } | 380 } |
381 | 381 |
382 TEST_F(AddressValidatorTest, PreferShortSuggestions) { | 382 TEST_F(AddressValidatorTest, PreferShortSuggestions) { |
383 AddressData address; | 383 AddressData address; |
384 address.country_code = "US"; | 384 address.region_code = "US"; |
385 address.administrative_area = "CA"; | 385 address.administrative_area = "CA"; |
386 | 386 |
387 std::vector<AddressData> suggestions; | 387 std::vector<AddressData> suggestions; |
388 EXPECT_EQ(AddressValidator::SUCCESS, | 388 EXPECT_EQ(AddressValidator::SUCCESS, |
389 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); | 389 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); |
390 ASSERT_EQ(1U, suggestions.size()); | 390 ASSERT_EQ(1U, suggestions.size()); |
391 EXPECT_EQ("CA", suggestions[0].administrative_area); | 391 EXPECT_EQ("CA", suggestions[0].administrative_area); |
392 } | 392 } |
393 | 393 |
394 TEST_F(AddressValidatorTest, SuggestTheSingleMatchForFullMatchName) { | 394 TEST_F(AddressValidatorTest, SuggestTheSingleMatchForFullMatchName) { |
395 AddressData address; | 395 AddressData address; |
396 address.country_code = "US"; | 396 address.region_code = "US"; |
397 address.administrative_area = "Texas"; | 397 address.administrative_area = "Texas"; |
398 | 398 |
399 std::vector<AddressData> suggestions; | 399 std::vector<AddressData> suggestions; |
400 EXPECT_EQ(AddressValidator::SUCCESS, | 400 EXPECT_EQ(AddressValidator::SUCCESS, |
401 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); | 401 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); |
402 ASSERT_EQ(1U, suggestions.size()); | 402 ASSERT_EQ(1U, suggestions.size()); |
403 EXPECT_EQ("Texas", suggestions[0].administrative_area); | 403 EXPECT_EQ("Texas", suggestions[0].administrative_area); |
404 } | 404 } |
405 | 405 |
406 TEST_F(AddressValidatorTest, SuggestAdminArea) { | 406 TEST_F(AddressValidatorTest, SuggestAdminArea) { |
407 AddressData address; | 407 AddressData address; |
408 address.country_code = "US"; | 408 address.region_code = "US"; |
409 address.administrative_area = "Cali"; | 409 address.administrative_area = "Cali"; |
410 | 410 |
411 std::vector<AddressData> suggestions; | 411 std::vector<AddressData> suggestions; |
412 EXPECT_EQ(AddressValidator::SUCCESS, | 412 EXPECT_EQ(AddressValidator::SUCCESS, |
413 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); | 413 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); |
414 ASSERT_EQ(1U, suggestions.size()); | 414 ASSERT_EQ(1U, suggestions.size()); |
415 EXPECT_EQ("California", suggestions[0].administrative_area); | 415 EXPECT_EQ("California", suggestions[0].administrative_area); |
416 } | 416 } |
417 | 417 |
418 TEST_F(AddressValidatorTest, MultipleSuggestions) { | 418 TEST_F(AddressValidatorTest, MultipleSuggestions) { |
419 AddressData address; | 419 AddressData address; |
420 address.country_code = "US"; | 420 address.region_code = "US"; |
421 address.administrative_area = "MA"; | 421 address.administrative_area = "MA"; |
422 | 422 |
423 std::vector<AddressData> suggestions; | 423 std::vector<AddressData> suggestions; |
424 EXPECT_EQ(AddressValidator::SUCCESS, | 424 EXPECT_EQ(AddressValidator::SUCCESS, |
425 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); | 425 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); |
426 EXPECT_LT(1U, suggestions.size()); | 426 EXPECT_LT(1U, suggestions.size()); |
427 | 427 |
428 // Massachusetts should not be a suggestion, because it's already covered | 428 // Massachusetts should not be a suggestion, because it's already covered |
429 // under MA. | 429 // under MA. |
430 std::set<std::string> expected_suggestions; | 430 std::set<std::string> expected_suggestions; |
431 expected_suggestions.insert("MA"); | 431 expected_suggestions.insert("MA"); |
432 expected_suggestions.insert("Maine"); | 432 expected_suggestions.insert("Maine"); |
433 expected_suggestions.insert("Marshall Islands"); | 433 expected_suggestions.insert("Marshall Islands"); |
434 expected_suggestions.insert("Maryland"); | 434 expected_suggestions.insert("Maryland"); |
435 for (std::vector<AddressData>::const_iterator it = suggestions.begin(); | 435 for (std::vector<AddressData>::const_iterator it = suggestions.begin(); |
436 it != suggestions.end(); ++it) { | 436 it != suggestions.end(); ++it) { |
437 expected_suggestions.erase(it->administrative_area); | 437 expected_suggestions.erase(it->administrative_area); |
438 } | 438 } |
439 EXPECT_TRUE(expected_suggestions.empty()); | 439 EXPECT_TRUE(expected_suggestions.empty()); |
440 } | 440 } |
441 | 441 |
442 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenLanguageMatches) { | 442 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenLanguageMatches) { |
443 validator_->LoadRules("KR"); | 443 validator_->LoadRules("KR"); |
444 AddressData address; | 444 AddressData address; |
445 address.language_code = "ko"; | 445 address.language_code = "ko"; |
446 address.country_code = "KR"; | 446 address.region_code = "KR"; |
447 address.postal_code = "210-210"; | 447 address.postal_code = "210-210"; |
448 | 448 |
449 std::vector<AddressData> suggestions; | 449 std::vector<AddressData> suggestions; |
450 EXPECT_EQ(AddressValidator::SUCCESS, | 450 EXPECT_EQ(AddressValidator::SUCCESS, |
451 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 451 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
452 ASSERT_EQ(1U, suggestions.size()); | 452 ASSERT_EQ(1U, suggestions.size()); |
453 EXPECT_EQ("강원도", suggestions[0].administrative_area); | 453 EXPECT_EQ("강원도", suggestions[0].administrative_area); |
454 EXPECT_EQ("210-210", suggestions[0].postal_code); | 454 EXPECT_EQ("210-210", suggestions[0].postal_code); |
455 } | 455 } |
456 | 456 |
457 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenUserInputIsNotLatin) { | 457 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenUserInputIsNotLatin) { |
458 validator_->LoadRules("KR"); | 458 validator_->LoadRules("KR"); |
459 AddressData address; | 459 AddressData address; |
460 address.language_code = "en"; | 460 address.language_code = "en"; |
461 address.country_code = "KR"; | 461 address.region_code = "KR"; |
462 address.administrative_area = "강원"; | 462 address.administrative_area = "강원"; |
463 | 463 |
464 std::vector<AddressData> suggestions; | 464 std::vector<AddressData> suggestions; |
465 EXPECT_EQ(AddressValidator::SUCCESS, | 465 EXPECT_EQ(AddressValidator::SUCCESS, |
466 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); | 466 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); |
467 ASSERT_EQ(1U, suggestions.size()); | 467 ASSERT_EQ(1U, suggestions.size()); |
468 EXPECT_EQ("강원도", suggestions[0].administrative_area); | 468 EXPECT_EQ("강원도", suggestions[0].administrative_area); |
469 } | 469 } |
470 | 470 |
471 TEST_F(AddressValidatorTest, | 471 TEST_F(AddressValidatorTest, |
472 SuggestLatinNameWhenLanguageDiffersAndLatinNameAvailable) { | 472 SuggestLatinNameWhenLanguageDiffersAndLatinNameAvailable) { |
473 validator_->LoadRules("KR"); | 473 validator_->LoadRules("KR"); |
474 AddressData address; | 474 AddressData address; |
475 address.language_code = "en"; | 475 address.language_code = "en"; |
476 address.country_code = "KR"; | 476 address.region_code = "KR"; |
477 address.postal_code = "210-210"; | 477 address.postal_code = "210-210"; |
478 | 478 |
479 std::vector<AddressData> suggestions; | 479 std::vector<AddressData> suggestions; |
480 EXPECT_EQ(AddressValidator::SUCCESS, | 480 EXPECT_EQ(AddressValidator::SUCCESS, |
481 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 481 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
482 ASSERT_EQ(1U, suggestions.size()); | 482 ASSERT_EQ(1U, suggestions.size()); |
483 EXPECT_EQ("Gangwon", suggestions[0].administrative_area); | 483 EXPECT_EQ("Gangwon", suggestions[0].administrative_area); |
484 EXPECT_EQ("210-210", suggestions[0].postal_code); | 484 EXPECT_EQ("210-210", suggestions[0].postal_code); |
485 } | 485 } |
486 | 486 |
487 TEST_F(AddressValidatorTest, SuggestLatinNameWhenUserInputIsLatin) { | 487 TEST_F(AddressValidatorTest, SuggestLatinNameWhenUserInputIsLatin) { |
488 validator_->LoadRules("KR"); | 488 validator_->LoadRules("KR"); |
489 AddressData address; | 489 AddressData address; |
490 address.language_code = "ko"; | 490 address.language_code = "ko"; |
491 address.country_code = "KR"; | 491 address.region_code = "KR"; |
492 address.administrative_area = "Gang"; | 492 address.administrative_area = "Gang"; |
493 | 493 |
494 std::vector<AddressData> suggestions; | 494 std::vector<AddressData> suggestions; |
495 EXPECT_EQ(AddressValidator::SUCCESS, | 495 EXPECT_EQ(AddressValidator::SUCCESS, |
496 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); | 496 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); |
497 ASSERT_EQ(1U, suggestions.size()); | 497 ASSERT_EQ(1U, suggestions.size()); |
498 EXPECT_EQ("Gangwon", suggestions[0].administrative_area); | 498 EXPECT_EQ("Gangwon", suggestions[0].administrative_area); |
499 } | 499 } |
500 | 500 |
501 TEST_F(AddressValidatorTest, NoSuggestionsForEmptyAddress) { | 501 TEST_F(AddressValidatorTest, NoSuggestionsForEmptyAddress) { |
502 AddressData address; | 502 AddressData address; |
503 address.country_code = "US"; | 503 address.region_code = "US"; |
504 | 504 |
505 std::vector<AddressData> suggestions; | 505 std::vector<AddressData> suggestions; |
506 EXPECT_EQ( | 506 EXPECT_EQ( |
507 AddressValidator::SUCCESS, | 507 AddressValidator::SUCCESS, |
508 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions)); | 508 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions)); |
509 EXPECT_TRUE(suggestions.empty()); | 509 EXPECT_TRUE(suggestions.empty()); |
510 } | 510 } |
511 | 511 |
512 TEST_F(AddressValidatorTest, SuggestionIncludesCountry) { | 512 TEST_F(AddressValidatorTest, SuggestionIncludesCountry) { |
513 AddressData address; | 513 AddressData address; |
514 address.country_code = "US"; | 514 address.region_code = "US"; |
515 address.postal_code = "90291"; | 515 address.postal_code = "90291"; |
516 | 516 |
517 std::vector<AddressData> suggestions; | 517 std::vector<AddressData> suggestions; |
518 EXPECT_EQ(AddressValidator::SUCCESS, | 518 EXPECT_EQ(AddressValidator::SUCCESS, |
519 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); | 519 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); |
520 ASSERT_EQ(1U, suggestions.size()); | 520 ASSERT_EQ(1U, suggestions.size()); |
521 EXPECT_EQ("US", suggestions[0].country_code); | 521 EXPECT_EQ("US", suggestions[0].region_code); |
522 } | 522 } |
523 | 523 |
524 TEST_F(AddressValidatorTest, SuggestOnlyForAdministrativeAreasAndPostalCode) { | 524 TEST_F(AddressValidatorTest, SuggestOnlyForAdministrativeAreasAndPostalCode) { |
525 AddressData address; | 525 AddressData address; |
526 address.country_code = "US"; | 526 address.region_code = "US"; |
527 address.administrative_area = "CA"; | 527 address.administrative_area = "CA"; |
528 address.locality = "Los Angeles"; | 528 address.locality = "Los Angeles"; |
529 address.dependent_locality = "Venice"; | 529 address.dependent_locality = "Venice"; |
530 address.postal_code = "90291"; | 530 address.postal_code = "90291"; |
531 address.sorting_code = "123"; | 531 address.sorting_code = "123"; |
532 address.address_lines.push_back("123 Main St"); | 532 address.address_line.push_back("123 Main St"); |
533 address.recipient = "Jon Smith"; | 533 address.recipient = "Jon Smith"; |
534 | 534 |
535 // Fields that should not have suggestions in US. | 535 // Fields that should not have suggestions in US. |
536 static const AddressField kNoSugestFields[] = { | 536 static const AddressField kNoSugestFields[] = { |
537 COUNTRY, | 537 COUNTRY, |
538 LOCALITY, | 538 LOCALITY, |
539 DEPENDENT_LOCALITY, | 539 DEPENDENT_LOCALITY, |
540 SORTING_CODE, | 540 SORTING_CODE, |
541 STREET_ADDRESS, | 541 STREET_ADDRESS, |
542 RECIPIENT | 542 RECIPIENT |
543 }; | 543 }; |
544 | 544 |
545 static const size_t kNumNoSuggestFields = | 545 static const size_t kNumNoSuggestFields = |
546 sizeof kNoSugestFields / sizeof (AddressField); | 546 sizeof kNoSugestFields / sizeof (AddressField); |
547 | 547 |
548 for (size_t i = 0; i < kNumNoSuggestFields; ++i) { | 548 for (size_t i = 0; i < kNumNoSuggestFields; ++i) { |
549 std::vector<AddressData> suggestions; | 549 std::vector<AddressData> suggestions; |
550 EXPECT_EQ(AddressValidator::SUCCESS, | 550 EXPECT_EQ(AddressValidator::SUCCESS, |
551 validator_->GetSuggestions( | 551 validator_->GetSuggestions( |
552 address, kNoSugestFields[i], 999, &suggestions)); | 552 address, kNoSugestFields[i], 999, &suggestions)); |
553 EXPECT_TRUE(suggestions.empty()); | 553 EXPECT_TRUE(suggestions.empty()); |
554 } | 554 } |
555 } | 555 } |
556 | 556 |
557 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaName) { | 557 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaName) { |
558 AddressData address; | 558 AddressData address; |
559 address.country_code = "US"; | 559 address.region_code = "US"; |
560 address.administrative_area = "cALIFORNIa"; | 560 address.administrative_area = "cALIFORNIa"; |
561 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); | 561 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); |
562 EXPECT_EQ("CA", address.administrative_area); | 562 EXPECT_EQ("CA", address.administrative_area); |
563 } | 563 } |
564 | 564 |
565 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaKey) { | 565 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaKey) { |
566 AddressData address; | 566 AddressData address; |
567 address.country_code = "US"; | 567 address.region_code = "US"; |
568 address.administrative_area = "CA"; | 568 address.administrative_area = "CA"; |
569 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); | 569 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); |
570 EXPECT_EQ("CA", address.administrative_area); | 570 EXPECT_EQ("CA", address.administrative_area); |
571 } | 571 } |
572 | 572 |
573 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaKey) { | 573 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaKey) { |
574 validator_->LoadRules("JP"); | 574 validator_->LoadRules("JP"); |
575 AddressData address; | 575 AddressData address; |
576 address.country_code = "JP"; | 576 address.region_code = "JP"; |
577 address.administrative_area = "東京都"; | 577 address.administrative_area = "東京都"; |
578 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); | 578 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); |
579 EXPECT_EQ("東京都", address.administrative_area); | 579 EXPECT_EQ("東京都", address.administrative_area); |
580 } | 580 } |
581 | 581 |
582 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaLatinName) { | 582 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaLatinName) { |
583 validator_->LoadRules("JP"); | 583 validator_->LoadRules("JP"); |
584 AddressData address; | 584 AddressData address; |
585 address.country_code = "JP"; | 585 address.region_code = "JP"; |
586 address.administrative_area = "tOKYo"; | 586 address.administrative_area = "tOKYo"; |
587 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); | 587 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); |
588 EXPECT_EQ("TOKYO", address.administrative_area); | 588 EXPECT_EQ("TOKYO", address.administrative_area); |
589 } | 589 } |
590 | 590 |
591 } // namespace addressinput | 591 } // namespace addressinput |
592 } // namespace i18n | 592 } // namespace i18n |
OLD | NEW |