Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: third_party/libaddressinput/chromium/chrome_address_validator_unittest.cc

Issue 298863012: Use upstream libaddressinput in Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Validate required fields without rules. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "third_party/libaddressinput/chromium/chrome_address_validator.h"
6
5 #include <cstddef> 7 #include <cstddef>
6 #include <string> 8 #include <string>
7 #include <vector> 9 #include <vector>
8 10
9 #include "base/basictypes.h" 11 #include "base/basictypes.h"
10 #include "base/macros.h" 12 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
12 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
13 15 #include "third_party/libaddressinput/chromium/load_rules_delegate.h"
14 #define I18N_ADDRESSINPUT_UTIL_BASICTYPES_H_
15 #include "third_party/libaddressinput/chromium/preload_address_validator.h"
16 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_da ta.h" 16 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_da ta.h"
17 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_fi eld.h" 17 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_fi eld.h"
18 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_pr oblem.h" 18 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_pr oblem.h"
19 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui .h"
19 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_va lidator.h" 20 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_va lidator.h"
20 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/callback.h " 21 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/callback.h "
21 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/downloader .h" 22 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/downloader .h"
22 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/null_stora ge.h" 23 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/null_stora ge.h"
23 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h" 24 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h"
24 #include "third_party/libaddressinput/src/cpp/src/region_data_constants.h"
25 #include "third_party/libaddressinput/src/cpp/test/fake_downloader.h" 25 #include "third_party/libaddressinput/src/cpp/test/fake_downloader.h"
26 26
27 namespace { 27 namespace {
28 28
29 using ::autofill::PreloadAddressValidator; 29 using ::autofill::AddressValidator;
30 using ::autofill::LoadRulesDelegate;
30 using ::i18n::addressinput::AddressData; 31 using ::i18n::addressinput::AddressData;
31 using ::i18n::addressinput::AddressField; 32 using ::i18n::addressinput::AddressField;
33 using ::i18n::addressinput::AddressProblem;
32 using ::i18n::addressinput::BuildCallback; 34 using ::i18n::addressinput::BuildCallback;
33 using ::i18n::addressinput::Downloader; 35 using ::i18n::addressinput::Downloader;
34 using ::i18n::addressinput::FakeDownloader; 36 using ::i18n::addressinput::FakeDownloader;
35 using ::i18n::addressinput::FieldProblemMap; 37 using ::i18n::addressinput::FieldProblemMap;
38 using ::i18n::addressinput::GetRegionCodes;
36 using ::i18n::addressinput::NullStorage; 39 using ::i18n::addressinput::NullStorage;
37 using ::i18n::addressinput::RegionDataConstants;
38 using ::i18n::addressinput::Storage; 40 using ::i18n::addressinput::Storage;
39 41
40 using ::i18n::addressinput::COUNTRY; 42 using ::i18n::addressinput::COUNTRY;
41 using ::i18n::addressinput::ADMIN_AREA; 43 using ::i18n::addressinput::ADMIN_AREA;
42 using ::i18n::addressinput::LOCALITY; 44 using ::i18n::addressinput::LOCALITY;
43 using ::i18n::addressinput::DEPENDENT_LOCALITY; 45 using ::i18n::addressinput::DEPENDENT_LOCALITY;
44 using ::i18n::addressinput::SORTING_CODE; 46 using ::i18n::addressinput::SORTING_CODE;
45 using ::i18n::addressinput::POSTAL_CODE; 47 using ::i18n::addressinput::POSTAL_CODE;
46 using ::i18n::addressinput::STREET_ADDRESS; 48 using ::i18n::addressinput::STREET_ADDRESS;
47 using ::i18n::addressinput::RECIPIENT; 49 using ::i18n::addressinput::RECIPIENT;
48 50
49 using ::i18n::addressinput::UNKNOWN_VALUE;
50 using ::i18n::addressinput::INVALID_FORMAT; 51 using ::i18n::addressinput::INVALID_FORMAT;
51 using ::i18n::addressinput::MISMATCHING_VALUE; 52 using ::i18n::addressinput::MISMATCHING_VALUE;
53 using ::i18n::addressinput::MISSING_REQUIRED_FIELD;
54 using ::i18n::addressinput::UNEXPECTED_FIELD;
55 using ::i18n::addressinput::UNKNOWN_VALUE;
56 using ::i18n::addressinput::USES_P_O_BOX;
52 57
53 class PreloadAddressValidatorTest : public testing::Test { 58 class AddressValidatorTest : public testing::Test, LoadRulesDelegate {
54 protected: 59 protected:
55 PreloadAddressValidatorTest() 60 AddressValidatorTest()
56 : validator_( 61 : validator_(
57 new PreloadAddressValidator( 62 new AddressValidator(
58 FakeDownloader::kFakeAggregateDataUrl, 63 FakeDownloader::kFakeAggregateDataUrl,
59 scoped_ptr<Downloader>(new FakeDownloader), 64 scoped_ptr<Downloader>(new FakeDownloader),
60 scoped_ptr<Storage>(new NullStorage))), 65 scoped_ptr<Storage>(new NullStorage),
61 loaded_(BuildCallback(this, &PreloadAddressValidatorTest::Loaded)) { 66 this)) {
62 validator_->LoadRules("US", *loaded_); 67 validator_->LoadRules("US");
63 } 68 }
64 69
65 virtual ~PreloadAddressValidatorTest() {} 70 virtual ~AddressValidatorTest() {}
66 71
67 const scoped_ptr<PreloadAddressValidator> validator_; 72 const scoped_ptr<AddressValidator> validator_;
68 const scoped_ptr<PreloadAddressValidator::Callback> loaded_;
69 73
70 private: 74 private:
71 void Loaded(bool success, 75 // LoadRulesDelegate implementation.
72 const std::string& region_code, 76 virtual void OnAddressValidationRulesLoaded(const std::string& country_code,
73 const int& rule_count) { 77 bool success) OVERRIDE {
74 AddressData address_data; 78 AddressData address_data;
75 address_data.region_code = region_code; 79 address_data.region_code = country_code;
76 FieldProblemMap dummy; 80 FieldProblemMap dummy;
77 PreloadAddressValidator::Status status = 81 AddressValidator::Status status =
78 validator_->Validate(address_data, NULL, &dummy); 82 validator_->ValidateAddress(address_data, NULL, &dummy);
79 ASSERT_EQ(success, status == PreloadAddressValidator::SUCCESS); 83 ASSERT_EQ(success, status == AddressValidator::SUCCESS);
80 } 84 }
81 85
82 DISALLOW_COPY_AND_ASSIGN(PreloadAddressValidatorTest); 86 DISALLOW_COPY_AND_ASSIGN(AddressValidatorTest);
83 }; 87 };
84 88
85 TEST_F(PreloadAddressValidatorTest, RegionHasRules) { 89 TEST_F(AddressValidatorTest, RegionHasRules) {
86 const std::vector<std::string>& region_codes = 90 const std::vector<std::string>& region_codes = GetRegionCodes();
87 RegionDataConstants::GetRegionCodes();
88 AddressData address; 91 AddressData address;
89 for (size_t i = 0; i < region_codes.size(); ++i) { 92 for (size_t i = 0; i < region_codes.size(); ++i) {
90 SCOPED_TRACE("For region: " + region_codes[i]); 93 SCOPED_TRACE("For region: " + region_codes[i]);
91 validator_->LoadRules(region_codes[i], *loaded_); 94 validator_->LoadRules(region_codes[i]);
92 address.region_code = region_codes[i]; 95 address.region_code = region_codes[i];
93 FieldProblemMap dummy; 96 FieldProblemMap dummy;
94 EXPECT_EQ( 97 EXPECT_EQ(
95 PreloadAddressValidator::SUCCESS, 98 AddressValidator::SUCCESS,
96 validator_->Validate(address, NULL, &dummy)); 99 validator_->ValidateAddress(address, NULL, &dummy));
97 } 100 }
98 } 101 }
99 102
100 TEST_F(PreloadAddressValidatorTest, EmptyAddressNoFatalFailure) { 103 TEST_F(AddressValidatorTest, EmptyAddressNoFatalFailure) {
101 AddressData address; 104 AddressData address;
102 address.region_code = "US"; 105 address.region_code = "US";
103 106
104 FieldProblemMap dummy; 107 FieldProblemMap dummy;
105 EXPECT_EQ( 108 EXPECT_EQ(
106 PreloadAddressValidator::SUCCESS, 109 AddressValidator::SUCCESS,
107 validator_->Validate(address, NULL, &dummy)); 110 validator_->ValidateAddress(address, NULL, &dummy));
108 } 111 }
109 112
110 TEST_F(PreloadAddressValidatorTest, USZipCode) { 113 TEST_F(AddressValidatorTest, UsStateNamesAreValidEntries) {
111 AddressData address; 114 AddressData address;
115 address.region_code = "US";
116 address.administrative_area = "California";
117
118 FieldProblemMap filter;
119 filter.insert(std::make_pair(ADMIN_AREA, UNKNOWN_VALUE));
120 FieldProblemMap problems;
121 EXPECT_EQ(
122 AddressValidator::SUCCESS,
123 validator_->ValidateAddress(address, &filter, &problems));
124 EXPECT_TRUE(problems.empty());
125 }
126
127 TEST_F(AddressValidatorTest, USZipCode) {
128 AddressData address;
129 address.recipient = "Mr. Smith";
112 address.address_line.push_back("340 Main St."); 130 address.address_line.push_back("340 Main St.");
113 address.locality = "Venice"; 131 address.locality = "Venice";
114 address.administrative_area = "CA"; 132 address.administrative_area = "CA";
115 address.region_code = "US"; 133 address.region_code = "US";
116 134
117 // Valid Californian zip code. 135 // Valid Californian zip code.
118 address.postal_code = "90291"; 136 address.postal_code = "90291";
119 FieldProblemMap problems; 137 FieldProblemMap problems;
120 EXPECT_EQ( 138 EXPECT_EQ(
121 PreloadAddressValidator::SUCCESS, 139 AddressValidator::SUCCESS,
122 validator_->Validate(address, NULL, &problems)); 140 validator_->ValidateAddress(address, NULL, &problems));
123 EXPECT_TRUE(problems.empty()); 141 EXPECT_TRUE(problems.empty());
124 142
125 problems.clear(); 143 problems.clear();
126 144
127 // An extended, valid Californian zip code. 145 // An extended, valid Californian zip code.
128 address.postal_code = "90210-1234"; 146 address.postal_code = "90210-1234";
129 EXPECT_EQ( 147 EXPECT_EQ(
130 PreloadAddressValidator::SUCCESS, 148 AddressValidator::SUCCESS,
131 validator_->Validate(address, NULL, &problems)); 149 validator_->ValidateAddress(address, NULL, &problems));
132 EXPECT_TRUE(problems.empty()); 150 EXPECT_TRUE(problems.empty());
133 151
134 problems.clear(); 152 problems.clear();
135 153
136 // New York zip code (which is invalid for California). 154 // New York zip code (which is invalid for California).
137 address.postal_code = "12345"; 155 address.postal_code = "12345";
138 EXPECT_EQ( 156 EXPECT_EQ(
139 PreloadAddressValidator::SUCCESS, 157 AddressValidator::SUCCESS,
140 validator_->Validate(address, NULL, &problems)); 158 validator_->ValidateAddress(address, NULL, &problems));
141 EXPECT_EQ(1U, problems.size()); 159 EXPECT_EQ(1U, problems.size());
142 EXPECT_EQ(problems.begin()->first, POSTAL_CODE); 160 EXPECT_EQ(problems.begin()->first, POSTAL_CODE);
143 EXPECT_EQ(problems.begin()->second, MISMATCHING_VALUE); 161 EXPECT_EQ(problems.begin()->second, MISMATCHING_VALUE);
144 162
145 problems.clear(); 163 problems.clear();
146 164
147 // A zip code with a "90" in the middle. 165 // A zip code with a "90" in the middle.
148 address.postal_code = "12903"; 166 address.postal_code = "12903";
149 EXPECT_EQ( 167 EXPECT_EQ(
150 PreloadAddressValidator::SUCCESS, 168 AddressValidator::SUCCESS,
151 validator_->Validate(address, NULL, &problems)); 169 validator_->ValidateAddress(address, NULL, &problems));
152 EXPECT_EQ(1U, problems.size()); 170 EXPECT_EQ(1U, problems.size());
153 EXPECT_EQ(problems.begin()->first, POSTAL_CODE); 171 EXPECT_EQ(problems.begin()->first, POSTAL_CODE);
154 EXPECT_EQ(problems.begin()->second, MISMATCHING_VALUE); 172 EXPECT_EQ(problems.begin()->second, MISMATCHING_VALUE);
155 173
156 problems.clear(); 174 problems.clear();
157 175
158 // Invalid zip code (too many digits). 176 // Invalid zip code (too many digits).
159 address.postal_code = "902911"; 177 address.postal_code = "902911";
160 EXPECT_EQ( 178 EXPECT_EQ(
161 PreloadAddressValidator::SUCCESS, 179 AddressValidator::SUCCESS,
162 validator_->Validate(address, NULL, &problems)); 180 validator_->ValidateAddress(address, NULL, &problems));
163 EXPECT_EQ(1U, problems.size()); 181 EXPECT_EQ(1U, problems.size());
164 EXPECT_EQ(problems.begin()->first, POSTAL_CODE); 182 EXPECT_EQ(problems.begin()->first, POSTAL_CODE);
165 EXPECT_EQ(problems.begin()->second, INVALID_FORMAT); 183 EXPECT_EQ(problems.begin()->second, INVALID_FORMAT);
166 184
167 problems.clear(); 185 problems.clear();
168 186
169 // Invalid zip code (too few digits). 187 // Invalid zip code (too few digits).
170 address.postal_code = "9029"; 188 address.postal_code = "9029";
171 EXPECT_EQ( 189 EXPECT_EQ(
172 PreloadAddressValidator::SUCCESS, 190 AddressValidator::SUCCESS,
173 validator_->Validate(address, NULL, &problems)); 191 validator_->ValidateAddress(address, NULL, &problems));
174 EXPECT_EQ(1U, problems.size()); 192 EXPECT_EQ(1U, problems.size());
175 EXPECT_EQ(problems.begin()->first, POSTAL_CODE); 193 EXPECT_EQ(problems.begin()->first, POSTAL_CODE);
176 EXPECT_EQ(problems.begin()->second, INVALID_FORMAT); 194 EXPECT_EQ(problems.begin()->second, INVALID_FORMAT);
177 } 195 }
178 196
179 // Test case disabled because libaddressinput address validation doesn't do 197 TEST_F(AddressValidatorTest, BasicValidation) {
180 // those kinds of normalizations that this test case expects. TODO: Something.
181 TEST_F(PreloadAddressValidatorTest, DISABLED_BasicValidation) {
182 // US rules should always be available, even though this load call fails. 198 // US rules should always be available, even though this load call fails.
183 validator_->LoadRules("US", *loaded_); 199 validator_->LoadRules("US");
184 AddressData address; 200 AddressData address;
185 address.region_code = "US"; 201 address.region_code = "US";
186 address.language_code = "en"; 202 address.language_code = "en";
187 address.administrative_area = "TX"; 203 address.administrative_area = "TX";
188 address.locality = "Paris"; 204 address.locality = "Paris";
189 address.postal_code = "75461"; 205 address.postal_code = "75461";
190 address.address_line.push_back("123 Main St"); 206 address.address_line.push_back("123 Main St");
207 address.recipient = "Mr. Smith";
191 FieldProblemMap problems; 208 FieldProblemMap problems;
192 EXPECT_EQ( 209 EXPECT_EQ(
193 PreloadAddressValidator::SUCCESS, 210 AddressValidator::SUCCESS,
194 validator_->Validate(address, NULL, &problems)); 211 validator_->ValidateAddress(address, NULL, &problems));
195 EXPECT_TRUE(problems.empty()); 212 EXPECT_TRUE(problems.empty());
196 213
197 // The display name works as well as the key. 214 // The display name works as well as the key.
198 address.administrative_area = "Texas"; 215 address.administrative_area = "Texas";
199 problems.clear(); 216 problems.clear();
200 EXPECT_EQ( 217 EXPECT_EQ(
201 PreloadAddressValidator::SUCCESS, 218 AddressValidator::SUCCESS,
202 validator_->Validate(address, NULL, &problems)); 219 validator_->ValidateAddress(address, NULL, &problems));
203 EXPECT_TRUE(problems.empty()); 220 EXPECT_TRUE(problems.empty());
204 221
205 // Ignore capitalization. 222 // Ignore capitalization.
206 address.administrative_area = "tx"; 223 address.administrative_area = "tx";
207 problems.clear(); 224 problems.clear();
208 EXPECT_EQ( 225 EXPECT_EQ(
209 PreloadAddressValidator::SUCCESS, 226 AddressValidator::SUCCESS,
210 validator_->Validate(address, NULL, &problems)); 227 validator_->ValidateAddress(address, NULL, &problems));
211 EXPECT_TRUE(problems.empty()); 228 EXPECT_TRUE(problems.empty());
212 229
213 // Ignore capitalization. 230 // Ignore capitalization.
214 address.administrative_area = "teXas"; 231 address.administrative_area = "teXas";
215 problems.clear(); 232 problems.clear();
216 EXPECT_EQ( 233 EXPECT_EQ(
217 PreloadAddressValidator::SUCCESS, 234 AddressValidator::SUCCESS,
218 validator_->Validate(address, NULL, &problems)); 235 validator_->ValidateAddress(address, NULL, &problems));
219 EXPECT_TRUE(problems.empty()); 236 EXPECT_TRUE(problems.empty());
220 237
221 // Ignore diacriticals. 238 // Ignore diacriticals.
222 address.administrative_area = "T\u00E9xas"; 239 address.administrative_area = "T\u00E9xas";
223 problems.clear(); 240 problems.clear();
224 EXPECT_EQ( 241 EXPECT_EQ(
225 PreloadAddressValidator::SUCCESS, 242 AddressValidator::SUCCESS,
226 validator_->Validate(address, NULL, &problems)); 243 validator_->ValidateAddress(address, NULL, &problems));
227 EXPECT_TRUE(problems.empty()); 244 EXPECT_TRUE(problems.empty());
228 } 245 }
229 246
230 TEST_F(PreloadAddressValidatorTest, BasicValidationFailure) { 247 TEST_F(AddressValidatorTest, BasicValidationFailure) {
231 // US rules should always be available, even though this load call fails. 248 // US rules should always be available, even though this load call fails.
232 validator_->LoadRules("US", *loaded_); 249 validator_->LoadRules("US");
233 AddressData address; 250 AddressData address;
234 address.region_code = "US"; 251 address.region_code = "US";
235 address.language_code = "en"; 252 address.language_code = "en";
236 address.administrative_area = "XT"; 253 address.administrative_area = "XT";
237 address.locality = "Paris"; 254 address.locality = "Paris";
238 address.postal_code = "75461"; 255 address.postal_code = "75461";
239 address.address_line.push_back("123 Main St"); 256 address.address_line.push_back("123 Main St");
257 address.recipient = "Mr. Smith";
240 FieldProblemMap problems; 258 FieldProblemMap problems;
241 EXPECT_EQ( 259 EXPECT_EQ(
242 PreloadAddressValidator::SUCCESS, 260 AddressValidator::SUCCESS,
243 validator_->Validate(address, NULL, &problems)); 261 validator_->ValidateAddress(address, NULL, &problems));
244 262
245 ASSERT_EQ(1U, problems.size()); 263 ASSERT_EQ(1U, problems.size());
246 EXPECT_EQ(UNKNOWN_VALUE, problems.begin()->second); 264 EXPECT_EQ(UNKNOWN_VALUE, problems.begin()->second);
247 EXPECT_EQ(ADMIN_AREA, problems.begin()->first); 265 EXPECT_EQ(ADMIN_AREA, problems.begin()->first);
248 } 266 }
249 267
250 TEST_F(PreloadAddressValidatorTest, NoNullSuggestionsCrash) { 268 TEST_F(AddressValidatorTest, NoNullSuggestionsCrash) {
251 AddressData address; 269 AddressData address;
252 address.region_code = "US"; 270 address.region_code = "US";
253 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 271 EXPECT_EQ(AddressValidator::SUCCESS,
254 validator_->GetSuggestions(address, COUNTRY, 1, NULL)); 272 validator_->GetSuggestions(address, COUNTRY, 1, NULL));
255 } 273 }
256 274
257 TEST_F(PreloadAddressValidatorTest, SuggestAdminAreaForPostalCode) { 275 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCode) {
258 AddressData address; 276 AddressData address;
259 address.region_code = "US"; 277 address.region_code = "US";
260 address.postal_code = "90291"; 278 address.postal_code = "90291";
261 279
262 std::vector<AddressData> suggestions; 280 std::vector<AddressData> suggestions;
263 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 281 EXPECT_EQ(AddressValidator::SUCCESS,
264 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 282 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
265 ASSERT_EQ(1U, suggestions.size()); 283 ASSERT_EQ(1U, suggestions.size());
266 EXPECT_EQ("CA", suggestions[0].administrative_area); 284 EXPECT_EQ("CA", suggestions[0].administrative_area);
267 EXPECT_EQ("90291", suggestions[0].postal_code); 285 EXPECT_EQ("90291", suggestions[0].postal_code);
268 } 286 }
269 287
270 TEST_F(PreloadAddressValidatorTest, SuggestLocalityForPostalCodeWithAdminArea) { 288 TEST_F(AddressValidatorTest, SuggestLocalityForPostalCodeWithAdminArea) {
271 validator_->LoadRules("TW", *loaded_); 289 validator_->LoadRules("TW");
272 AddressData address; 290 AddressData address;
273 address.region_code = "TW"; 291 address.region_code = "TW";
274 address.postal_code = "515"; 292 address.postal_code = "515";
275 address.administrative_area = "Changhua"; 293 address.administrative_area = "Changhua";
294 address.language_code = "zh-Latn";
276 295
277 std::vector<AddressData> suggestions; 296 std::vector<AddressData> suggestions;
278 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 297 EXPECT_EQ(AddressValidator::SUCCESS,
279 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 298 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
280 ASSERT_EQ(1U, suggestions.size()); 299 ASSERT_EQ(1U, suggestions.size());
281 EXPECT_EQ("Dacun Township", suggestions[0].locality); 300 EXPECT_EQ("Dacun Township", suggestions[0].locality);
282 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); 301 EXPECT_EQ("Changhua County", suggestions[0].administrative_area);
283 EXPECT_EQ("515", suggestions[0].postal_code); 302 EXPECT_EQ("515", suggestions[0].postal_code);
284 } 303 }
285 304
286 TEST_F(PreloadAddressValidatorTest, SuggestAdminAreaForPostalCodeWithLocality) { 305 TEST_F(AddressValidatorTest, SuggestAdminAreaForPostalCodeWithLocality) {
287 validator_->LoadRules("TW", *loaded_); 306 validator_->LoadRules("TW");
288 AddressData address; 307 AddressData address;
289 address.region_code = "TW"; 308 address.region_code = "TW";
290 address.postal_code = "515"; 309 address.postal_code = "515";
291 address.locality = "Dacun"; 310 address.locality = "Dacun";
311 address.language_code = "zh-Latn";
292 312
293 std::vector<AddressData> suggestions; 313 std::vector<AddressData> suggestions;
294 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 314 EXPECT_EQ(AddressValidator::SUCCESS,
295 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 315 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
296 ASSERT_EQ(1U, suggestions.size()); 316 ASSERT_EQ(1U, suggestions.size());
297 EXPECT_EQ("Dacun Township", suggestions[0].locality); 317 EXPECT_EQ("Dacun Township", suggestions[0].locality);
298 EXPECT_EQ("Changhua County", suggestions[0].administrative_area); 318 EXPECT_EQ("Changhua County", suggestions[0].administrative_area);
299 EXPECT_EQ("515", suggestions[0].postal_code); 319 EXPECT_EQ("515", suggestions[0].postal_code);
300 } 320 }
301 321
302 TEST_F(PreloadAddressValidatorTest, NoSuggestForPostalCodeWithWrongAdminArea) { 322 TEST_F(AddressValidatorTest, NoSuggestForPostalCodeWithWrongAdminArea) {
303 AddressData address; 323 AddressData address;
304 address.region_code = "US"; 324 address.region_code = "US";
305 address.postal_code = "90066"; 325 address.postal_code = "90066";
306 address.postal_code = "TX"; 326 address.postal_code = "TX";
307 327
308 std::vector<AddressData> suggestions; 328 std::vector<AddressData> suggestions;
309 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 329 EXPECT_EQ(AddressValidator::SUCCESS,
310 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 330 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
311 EXPECT_TRUE(suggestions.empty()); 331 EXPECT_TRUE(suggestions.empty());
312 } 332 }
313 333
314 TEST_F(PreloadAddressValidatorTest, SuggestForLocality) { 334 TEST_F(AddressValidatorTest, SuggestForLocality) {
315 validator_->LoadRules("CN", *loaded_); 335 validator_->LoadRules("CN");
316 AddressData address; 336 AddressData address;
317 address.region_code = "CN"; 337 address.region_code = "CN";
318 address.locality = "Anqin"; 338 address.locality = "Anqin";
339 address.language_code = "zh-Latn";
319 340
320 std::vector<AddressData> suggestions; 341 std::vector<AddressData> suggestions;
321 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 342 EXPECT_EQ(AddressValidator::SUCCESS,
322 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); 343 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions));
323 ASSERT_EQ(1U, suggestions.size()); 344 ASSERT_EQ(1U, suggestions.size());
324 EXPECT_EQ("Anqing Shi", suggestions[0].locality); 345 EXPECT_EQ("Anqing Shi", suggestions[0].locality);
325 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); 346 EXPECT_EQ("Anhui Sheng", suggestions[0].administrative_area);
326 } 347 }
327 348
328 TEST_F(PreloadAddressValidatorTest, SuggestForLocalityAndAdminArea) { 349 TEST_F(AddressValidatorTest, SuggestForLocalityAndAdminArea) {
329 validator_->LoadRules("CN", *loaded_); 350 validator_->LoadRules("CN");
330 AddressData address; 351 AddressData address;
331 address.region_code = "CN"; 352 address.region_code = "CN";
332 address.locality = "Anqing"; 353 address.locality = "Anqing";
333 address.administrative_area = "Anhui"; 354 address.administrative_area = "Anhui";
355 address.language_code = "zh-Latn";
334 356
335 std::vector<AddressData> suggestions; 357 std::vector<AddressData> suggestions;
336 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 358 EXPECT_EQ(AddressValidator::SUCCESS,
337 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions)); 359 validator_->GetSuggestions(address, LOCALITY, 10, &suggestions));
338 ASSERT_EQ(1U, suggestions.size()); 360 ASSERT_EQ(1U, suggestions.size());
339 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); 361 EXPECT_TRUE(suggestions[0].dependent_locality.empty());
340 EXPECT_EQ("Anqing Shi", suggestions[0].locality); 362 EXPECT_EQ("Anqing Shi", suggestions[0].locality);
341 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); 363 EXPECT_EQ("Anhui Sheng", suggestions[0].administrative_area);
342 } 364 }
343 365
344 TEST_F(PreloadAddressValidatorTest, SuggestForAdminAreaAndLocality) { 366 TEST_F(AddressValidatorTest, SuggestForAdminAreaAndLocality) {
345 validator_->LoadRules("CN", *loaded_); 367 validator_->LoadRules("CN");
346 AddressData address; 368 AddressData address;
347 address.region_code = "CN"; 369 address.region_code = "CN";
348 address.locality = "Anqing"; 370 address.locality = "Anqing";
349 address.administrative_area = "Anhui"; 371 address.administrative_area = "Anhui";
372 address.language_code = "zh-Latn";
350 373
351 std::vector<AddressData> suggestions; 374 std::vector<AddressData> suggestions;
352 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 375 EXPECT_EQ(AddressValidator::SUCCESS,
353 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); 376 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions));
354 ASSERT_EQ(1U, suggestions.size()); 377 ASSERT_EQ(1U, suggestions.size());
355 EXPECT_TRUE(suggestions[0].dependent_locality.empty()); 378 EXPECT_TRUE(suggestions[0].dependent_locality.empty());
356 EXPECT_TRUE(suggestions[0].locality.empty()); 379 EXPECT_TRUE(suggestions[0].locality.empty());
357 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); 380 EXPECT_EQ("Anhui Sheng", suggestions[0].administrative_area);
358 } 381 }
359 382
360 TEST_F(PreloadAddressValidatorTest, SuggestForDependentLocality) { 383 TEST_F(AddressValidatorTest, SuggestForDependentLocality) {
361 validator_->LoadRules("CN", *loaded_); 384 validator_->LoadRules("CN");
362 AddressData address; 385 AddressData address;
363 address.region_code = "CN"; 386 address.region_code = "CN";
364 address.dependent_locality = "Zongyang"; 387 address.dependent_locality = "Zongyang";
388 address.language_code = "zh-Latn";
365 389
366 std::vector<AddressData> suggestions; 390 std::vector<AddressData> suggestions;
367 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 391 EXPECT_EQ(AddressValidator::SUCCESS,
368 validator_->GetSuggestions( 392 validator_->GetSuggestions(
369 address, DEPENDENT_LOCALITY, 10, &suggestions)); 393 address, DEPENDENT_LOCALITY, 10, &suggestions));
370 ASSERT_EQ(1U, suggestions.size()); 394 ASSERT_EQ(1U, suggestions.size());
371 EXPECT_EQ("Zongyang Xian", suggestions[0].dependent_locality); 395 EXPECT_EQ("Zongyang Xian", suggestions[0].dependent_locality);
372 EXPECT_EQ("Anqing Shi", suggestions[0].locality); 396 EXPECT_EQ("Anqing Shi", suggestions[0].locality);
373 EXPECT_EQ("ANHUI SHENG", suggestions[0].administrative_area); 397 EXPECT_EQ("Anhui Sheng", suggestions[0].administrative_area);
374 } 398 }
375 399
376 TEST_F(PreloadAddressValidatorTest, 400 TEST_F(AddressValidatorTest,
377 NoSuggestForDependentLocalityWithWrongAdminArea) { 401 NoSuggestForDependentLocalityWithWrongAdminArea) {
378 validator_->LoadRules("CN", *loaded_); 402 validator_->LoadRules("CN");
379 AddressData address; 403 AddressData address;
380 address.region_code = "CN"; 404 address.region_code = "CN";
381 address.dependent_locality = "Zongyang"; 405 address.dependent_locality = "Zongyang";
382 address.administrative_area = "Sichuan Sheng"; 406 address.administrative_area = "Sichuan Sheng";
407 address.language_code = "zh-Latn";
383 408
384 std::vector<AddressData> suggestions; 409 std::vector<AddressData> suggestions;
385 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 410 EXPECT_EQ(AddressValidator::SUCCESS,
386 validator_->GetSuggestions( 411 validator_->GetSuggestions(
387 address, DEPENDENT_LOCALITY, 10, &suggestions)); 412 address, DEPENDENT_LOCALITY, 10, &suggestions));
388 EXPECT_TRUE(suggestions.empty()); 413 EXPECT_TRUE(suggestions.empty());
389 } 414 }
390 415
391 TEST_F(PreloadAddressValidatorTest, EmptySuggestionsOverLimit) { 416 TEST_F(AddressValidatorTest, EmptySuggestionsOverLimit) {
392 AddressData address; 417 AddressData address;
393 address.region_code = "US"; 418 address.region_code = "US";
394 address.administrative_area = "A"; 419 address.administrative_area = "A";
395 420
396 std::vector<AddressData> suggestions; 421 std::vector<AddressData> suggestions;
397 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 422 EXPECT_EQ(AddressValidator::SUCCESS,
398 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); 423 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions));
399 EXPECT_TRUE(suggestions.empty()); 424 EXPECT_TRUE(suggestions.empty());
400 } 425 }
401 426
402 TEST_F(PreloadAddressValidatorTest, PreferShortSuggestions) { 427 TEST_F(AddressValidatorTest, PreferShortSuggestions) {
403 AddressData address; 428 AddressData address;
404 address.region_code = "US"; 429 address.region_code = "US";
405 address.administrative_area = "CA"; 430 address.administrative_area = "CA";
406 431
407 std::vector<AddressData> suggestions; 432 std::vector<AddressData> suggestions;
408 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 433 EXPECT_EQ(AddressValidator::SUCCESS,
409 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); 434 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions));
410 ASSERT_EQ(1U, suggestions.size()); 435 ASSERT_EQ(1U, suggestions.size());
411 EXPECT_EQ("CA", suggestions[0].administrative_area); 436 EXPECT_EQ("CA", suggestions[0].administrative_area);
412 } 437 }
413 438
414 TEST_F(PreloadAddressValidatorTest, SuggestTheSingleMatchForFullMatchName) { 439 TEST_F(AddressValidatorTest, SuggestTheSingleMatchForFullMatchName) {
415 AddressData address; 440 AddressData address;
416 address.region_code = "US"; 441 address.region_code = "US";
417 address.administrative_area = "Texas"; 442 address.administrative_area = "Texas";
418 443
419 std::vector<AddressData> suggestions; 444 std::vector<AddressData> suggestions;
420 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 445 EXPECT_EQ(AddressValidator::SUCCESS,
421 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); 446 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions));
422 ASSERT_EQ(1U, suggestions.size()); 447 ASSERT_EQ(1U, suggestions.size());
423 EXPECT_EQ("Texas", suggestions[0].administrative_area); 448 EXPECT_EQ("Texas", suggestions[0].administrative_area);
424 } 449 }
425 450
426 TEST_F(PreloadAddressValidatorTest, SuggestAdminArea) { 451 TEST_F(AddressValidatorTest, SuggestAdminArea) {
427 AddressData address; 452 AddressData address;
428 address.region_code = "US"; 453 address.region_code = "US";
429 address.administrative_area = "Cali"; 454 address.administrative_area = "Cali";
430 455
431 std::vector<AddressData> suggestions; 456 std::vector<AddressData> suggestions;
432 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 457 EXPECT_EQ(AddressValidator::SUCCESS,
433 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); 458 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions));
434 ASSERT_EQ(1U, suggestions.size()); 459 ASSERT_EQ(1U, suggestions.size());
435 EXPECT_EQ("California", suggestions[0].administrative_area); 460 EXPECT_EQ("California", suggestions[0].administrative_area);
436 } 461 }
437 462
438 TEST_F(PreloadAddressValidatorTest, MultipleSuggestions) { 463 TEST_F(AddressValidatorTest, MultipleSuggestions) {
439 AddressData address; 464 AddressData address;
440 address.region_code = "US"; 465 address.region_code = "US";
441 address.administrative_area = "MA"; 466 address.administrative_area = "MA";
442 467
443 std::vector<AddressData> suggestions; 468 std::vector<AddressData> suggestions;
444 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 469 EXPECT_EQ(AddressValidator::SUCCESS,
445 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions)); 470 validator_->GetSuggestions(address, ADMIN_AREA, 10, &suggestions));
446 EXPECT_LT(1U, suggestions.size()); 471 EXPECT_LT(1U, suggestions.size());
447 472
448 // Massachusetts should not be a suggestion, because it's already covered 473 // Massachusetts should not be a suggestion, because it's already covered
449 // under MA. 474 // under MA.
450 std::set<std::string> expected_suggestions; 475 std::set<std::string> expected_suggestions;
451 expected_suggestions.insert("MA"); 476 expected_suggestions.insert("MA");
452 expected_suggestions.insert("Maine"); 477 expected_suggestions.insert("Maine");
453 expected_suggestions.insert("Marshall Islands"); 478 expected_suggestions.insert("Marshall Islands");
454 expected_suggestions.insert("Maryland"); 479 expected_suggestions.insert("Maryland");
455 for (std::vector<AddressData>::const_iterator it = suggestions.begin(); 480 for (std::vector<AddressData>::const_iterator it = suggestions.begin();
456 it != suggestions.end(); ++it) { 481 it != suggestions.end(); ++it) {
457 expected_suggestions.erase(it->administrative_area); 482 expected_suggestions.erase(it->administrative_area);
458 } 483 }
459 EXPECT_TRUE(expected_suggestions.empty()); 484 EXPECT_TRUE(expected_suggestions.empty());
460 } 485 }
461 486
462 TEST_F(PreloadAddressValidatorTest, SuggestNonLatinKeyWhenLanguageMatches) { 487 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenLanguageMatches) {
463 validator_->LoadRules("KR", *loaded_); 488 validator_->LoadRules("KR");
464 AddressData address; 489 AddressData address;
465 address.language_code = "ko"; 490 address.language_code = "ko";
466 address.region_code = "KR"; 491 address.region_code = "KR";
467 address.postal_code = "210-210"; 492 address.postal_code = "210-210";
468 493
469 std::vector<AddressData> suggestions; 494 std::vector<AddressData> suggestions;
470 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 495 EXPECT_EQ(AddressValidator::SUCCESS,
471 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 496 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
472 ASSERT_EQ(1U, suggestions.size()); 497 ASSERT_EQ(1U, suggestions.size());
473 EXPECT_EQ("강원도", suggestions[0].administrative_area); 498 EXPECT_EQ("강원도", suggestions[0].administrative_area);
474 EXPECT_EQ("210-210", suggestions[0].postal_code); 499 EXPECT_EQ("210-210", suggestions[0].postal_code);
475 } 500 }
476 501
477 TEST_F(PreloadAddressValidatorTest, SuggestNonLatinKeyWhenUserInputIsNotLatin) { 502 TEST_F(AddressValidatorTest, SuggestNonLatinKeyWhenUserInputIsNotLatin) {
478 validator_->LoadRules("KR", *loaded_); 503 validator_->LoadRules("KR");
479 AddressData address; 504 AddressData address;
480 address.language_code = "en"; 505 address.language_code = "en";
481 address.region_code = "KR"; 506 address.region_code = "KR";
482 address.administrative_area = "강원"; 507 address.administrative_area = "강원";
483 508
484 std::vector<AddressData> suggestions; 509 std::vector<AddressData> suggestions;
485 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 510 EXPECT_EQ(AddressValidator::SUCCESS,
486 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions)); 511 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions));
487 ASSERT_EQ(1U, suggestions.size()); 512 ASSERT_EQ(1U, suggestions.size());
488 EXPECT_EQ("강원도", suggestions[0].administrative_area); 513 EXPECT_EQ("강원도", suggestions[0].administrative_area);
489 } 514 }
490 515
491 TEST_F(PreloadAddressValidatorTest, 516 TEST_F(AddressValidatorTest,
492 SuggestLatinNameWhenLanguageDiffersAndLatinNameAvailable) { 517 SuggestLatinNameWhenLanguageDiffersAndLatinNameAvailable) {
493 validator_->LoadRules("KR", *loaded_); 518 validator_->LoadRules("KR");
494 AddressData address; 519 AddressData address;
495 address.language_code = "en"; 520 address.language_code = "ko-Latn";
496 address.region_code = "KR"; 521 address.region_code = "KR";
497 address.postal_code = "210-210"; 522 address.postal_code = "210-210";
498 523
499 std::vector<AddressData> suggestions; 524 std::vector<AddressData> suggestions;
500 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 525 EXPECT_EQ(AddressValidator::SUCCESS,
501 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 526 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
502 ASSERT_EQ(1U, suggestions.size()); 527 ASSERT_EQ(1U, suggestions.size());
503 EXPECT_EQ("Gangwon", suggestions[0].administrative_area); 528 EXPECT_EQ("Gangwon", suggestions[0].administrative_area);
504 EXPECT_EQ("210-210", suggestions[0].postal_code); 529 EXPECT_EQ("210-210", suggestions[0].postal_code);
505 } 530 }
506 531
507 TEST_F(PreloadAddressValidatorTest, SuggestLatinNameWhenUserInputIsLatin) { 532 TEST_F(AddressValidatorTest, NoSuggestionsForEmptyAddress) {
508 validator_->LoadRules("KR", *loaded_);
509 AddressData address;
510 address.language_code = "ko";
511 address.region_code = "KR";
512 address.administrative_area = "Gang";
513
514 std::vector<AddressData> suggestions;
515 EXPECT_EQ(PreloadAddressValidator::SUCCESS,
516 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions));
517 ASSERT_EQ(1U, suggestions.size());
518 EXPECT_EQ("Gangwon", suggestions[0].administrative_area);
519 }
520
521 TEST_F(PreloadAddressValidatorTest, NoSuggestionsForEmptyAddress) {
522 AddressData address; 533 AddressData address;
523 address.region_code = "US"; 534 address.region_code = "US";
524 535
525 std::vector<AddressData> suggestions; 536 std::vector<AddressData> suggestions;
526 EXPECT_EQ( 537 EXPECT_EQ(
527 PreloadAddressValidator::SUCCESS, 538 AddressValidator::SUCCESS,
528 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions)); 539 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions));
529 EXPECT_TRUE(suggestions.empty()); 540 EXPECT_TRUE(suggestions.empty());
530 } 541 }
531 542
532 TEST_F(PreloadAddressValidatorTest, SuggestionIncludesCountry) { 543 TEST_F(AddressValidatorTest, SuggestionIncludesCountry) {
533 AddressData address; 544 AddressData address;
534 address.region_code = "US"; 545 address.region_code = "US";
535 address.postal_code = "90291"; 546 address.postal_code = "90291";
536 547
537 std::vector<AddressData> suggestions; 548 std::vector<AddressData> suggestions;
538 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 549 EXPECT_EQ(AddressValidator::SUCCESS,
539 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions)); 550 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
540 ASSERT_EQ(1U, suggestions.size()); 551 ASSERT_EQ(1U, suggestions.size());
541 EXPECT_EQ("US", suggestions[0].region_code); 552 EXPECT_EQ("US", suggestions[0].region_code);
542 } 553 }
543 554
544 TEST_F(PreloadAddressValidatorTest, 555 TEST_F(AddressValidatorTest, InvalidPostalCodeNoSuggestions) {
556 AddressData address;
557 address.region_code = "US";
558 address.postal_code = "0";
559
560 std::vector<AddressData> suggestions;
561 EXPECT_EQ(
562 AddressValidator::SUCCESS,
563 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions));
564 EXPECT_TRUE(suggestions.empty());
565 }
566
567 TEST_F(AddressValidatorTest, MismatchedPostalCodeNoSuggestions) {
568 AddressData address;
569 address.region_code = "US";
570 address.administrative_area = "TX";
571 address.postal_code = "90291";
572
573 std::vector<AddressData> suggestions;
574 EXPECT_EQ(
575 AddressValidator::SUCCESS,
576 validator_->GetSuggestions(address, POSTAL_CODE, 999, &suggestions));
577 EXPECT_TRUE(suggestions.empty());
578 }
579
580 TEST_F(AddressValidatorTest,
545 SuggestOnlyForAdministrativeAreasAndPostalCode) { 581 SuggestOnlyForAdministrativeAreasAndPostalCode) {
546 AddressData address; 582 AddressData address;
547 address.region_code = "US"; 583 address.region_code = "US";
548 address.administrative_area = "CA"; 584 address.administrative_area = "CA";
549 address.locality = "Los Angeles"; 585 address.locality = "Los Angeles";
550 address.dependent_locality = "Venice"; 586 address.dependent_locality = "Venice";
551 address.postal_code = "90291"; 587 address.postal_code = "90291";
552 address.sorting_code = "123"; 588 address.sorting_code = "123";
553 address.address_line.push_back("123 Main St"); 589 address.address_line.push_back("123 Main St");
554 address.recipient = "Jon Smith"; 590 address.recipient = "Jon Smith";
555 591
556 // Fields that should not have suggestions in US. 592 // Fields that should not have suggestions in US.
557 static const AddressField kNoSugestFields[] = { 593 static const AddressField kNoSugestFields[] = {
558 COUNTRY, 594 COUNTRY,
559 LOCALITY, 595 LOCALITY,
560 DEPENDENT_LOCALITY, 596 DEPENDENT_LOCALITY,
561 SORTING_CODE, 597 SORTING_CODE,
562 STREET_ADDRESS, 598 STREET_ADDRESS,
563 RECIPIENT 599 RECIPIENT
564 }; 600 };
565 601
566 static const size_t kNumNoSuggestFields = 602 static const size_t kNumNoSuggestFields =
567 sizeof kNoSugestFields / sizeof (AddressField); 603 sizeof kNoSugestFields / sizeof (AddressField);
568 604
569 for (size_t i = 0; i < kNumNoSuggestFields; ++i) { 605 for (size_t i = 0; i < kNumNoSuggestFields; ++i) {
570 std::vector<AddressData> suggestions; 606 std::vector<AddressData> suggestions;
571 EXPECT_EQ(PreloadAddressValidator::SUCCESS, 607 EXPECT_EQ(AddressValidator::SUCCESS,
572 validator_->GetSuggestions( 608 validator_->GetSuggestions(
573 address, kNoSugestFields[i], 999, &suggestions)); 609 address, kNoSugestFields[i], 999, &suggestions));
574 EXPECT_TRUE(suggestions.empty()); 610 EXPECT_TRUE(suggestions.empty());
575 } 611 }
576 } 612 }
577 613
578 TEST_F(PreloadAddressValidatorTest, CanonicalizeUsAdminAreaName) { 614 TEST_F(AddressValidatorTest, SuggestionsAreCleared) {
615 AddressData address;
616 address.region_code = "US";
617
618 std::vector<AddressData> suggestions(1, address);
619 EXPECT_EQ(AddressValidator::SUCCESS,
620 validator_->GetSuggestions(address, POSTAL_CODE, 1, &suggestions));
621 EXPECT_TRUE(suggestions.empty());
622 }
623
624 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaName) {
579 AddressData address; 625 AddressData address;
580 address.region_code = "US"; 626 address.region_code = "US";
581 address.administrative_area = "cALIFORNIa"; 627 address.administrative_area = "cALIFORNIa";
582 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); 628 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
583 EXPECT_EQ("CA", address.administrative_area); 629 EXPECT_EQ("CA", address.administrative_area);
584 } 630 }
585 631
586 TEST_F(PreloadAddressValidatorTest, CanonicalizeUsAdminAreaKey) { 632 TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaKey) {
587 AddressData address; 633 AddressData address;
588 address.region_code = "US"; 634 address.region_code = "US";
589 address.administrative_area = "CA"; 635 address.administrative_area = "CA";
590 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); 636 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
591 EXPECT_EQ("CA", address.administrative_area); 637 EXPECT_EQ("CA", address.administrative_area);
592 } 638 }
593 639
594 TEST_F(PreloadAddressValidatorTest, CanonicalizeJpAdminAreaKey) { 640 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaKey) {
595 validator_->LoadRules("JP", *loaded_); 641 validator_->LoadRules("JP");
596 AddressData address; 642 AddressData address;
597 address.region_code = "JP"; 643 address.region_code = "JP";
598 address.administrative_area = "東京都"; 644 address.administrative_area = "東京都";
599 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); 645 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
600 EXPECT_EQ("東京都", address.administrative_area); 646 EXPECT_EQ("東京都", address.administrative_area);
601 } 647 }
602 648
603 TEST_F(PreloadAddressValidatorTest, CanonicalizeJpAdminAreaLatinName) { 649 TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaLatinName) {
604 validator_->LoadRules("JP", *loaded_); 650 validator_->LoadRules("JP");
605 AddressData address; 651 AddressData address;
606 address.region_code = "JP"; 652 address.region_code = "JP";
607 address.administrative_area = "tOKYo"; 653 address.administrative_area = "tOKYo";
608 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address)); 654 EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
609 EXPECT_EQ("TOKYO", address.administrative_area); 655 EXPECT_EQ("TOKYO", address.administrative_area);
610 } 656 }
611 657
658 TEST_F(AddressValidatorTest, TokushimaSuggestionIsValid) {
659 validator_->LoadRules("JP");
660 AddressData address;
661 address.region_code = "JP";
662 address.administrative_area = "Toku";
663 address.language_code = "ja-Latn";
664
665 std::vector<AddressData> suggestions;
666 EXPECT_EQ(AddressValidator::SUCCESS,
667 validator_->GetSuggestions(address, ADMIN_AREA, 1, &suggestions));
668 ASSERT_EQ(1U, suggestions.size());
669 EXPECT_EQ("TOKUSHIMA", suggestions[0].administrative_area);
670
671 FieldProblemMap filter;
672 for (int i = UNEXPECTED_FIELD; i <= USES_P_O_BOX; ++i)
673 filter.insert(std::make_pair(ADMIN_AREA, static_cast<AddressProblem>(i)));
674
675 FieldProblemMap problems;
676 EXPECT_EQ(AddressValidator::SUCCESS,
677 validator_->ValidateAddress(suggestions[0], &filter, &problems));
678 EXPECT_TRUE(problems.empty());
679 }
680
681 TEST_F(AddressValidatorTest, ValidateRequiredFieldsWithoutRules) {
682 // Do not load the rules for JP.
683 AddressData address;
684 address.region_code = "JP";
685
686 FieldProblemMap problems;
687 EXPECT_EQ(AddressValidator::RULES_UNAVAILABLE,
688 validator_->ValidateAddress(address, NULL, &problems));
689 EXPECT_FALSE(problems.empty());
690
691 for (FieldProblemMap::const_iterator it = problems.begin();
692 it != problems.end();
693 ++it) {
694 EXPECT_EQ(MISSING_REQUIRED_FIELD, it->second);
695 }
696 }
697
698 TEST_F(AddressValidatorTest,
699 DoNotValidateRequiredFieldsWithoutRulesWhenErorrIsFiltered) {
700 // Do not load the rules for JP.
701 AddressData address;
702 address.region_code = "JP";
703
704 FieldProblemMap filter;
705 filter.insert(std::make_pair(COUNTRY, UNKNOWN_VALUE));
706
707 FieldProblemMap problems;
708 EXPECT_EQ(AddressValidator::RULES_UNAVAILABLE,
709 validator_->ValidateAddress(address, &filter, &problems));
710 EXPECT_TRUE(problems.empty());
711 }
712
612 } // namespace 713 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698