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

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

Powered by Google App Engine
This is Rietveld 408576698