1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/memory/scoped_ptr.h"
6 #include "base/memory/scoped_vector.h"
7 #include "base/strings/string16.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "components/autofill/core/browser/address_field.h"
10 #include "components/autofill/core/browser/autofill_field.h"
11 #include "components/autofill/core/browser/autofill_scanner.h"
12 #include "components/autofill/core/common/form_field_data.h"
13 #include "testing/gtest/include/gtest/gtest.h"
17 class AddressFieldTest : public testing::Test {
22 ScopedVector<const AutofillField> list_;
23 scoped_ptr<AddressField> field_;
24 ServerFieldTypeMap field_type_map_;
26 // Downcast for tests.
27 static AddressField* Parse(AutofillScanner* scanner) {
28 return static_cast<AddressField*>(AddressField::Parse(scanner));
32 DISALLOW_COPY_AND_ASSIGN(AddressFieldTest);
35 TEST_F(AddressFieldTest, Empty) {
36 AutofillScanner scanner(list_.get());
37 field_.reset(Parse(&scanner));
38 ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
41 TEST_F(AddressFieldTest, NonParse) {
42 list_.push_back(new AutofillField);
43 AutofillScanner scanner(list_.get());
44 field_.reset(Parse(&scanner));
45 ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
48 TEST_F(AddressFieldTest, ParseOneLineAddress) {
50 field.form_control_type = "text";
52 field.label = ASCIIToUTF16("Address");
53 field.name = ASCIIToUTF16("address");
54 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
56 AutofillScanner scanner(list_.get());
57 field_.reset(Parse(&scanner));
58 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
59 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
60 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
62 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
63 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
66 TEST_F(AddressFieldTest, ParseOneLineAddressBilling) {
68 field.form_control_type = "text";
70 field.label = ASCIIToUTF16("Address");
71 field.name = ASCIIToUTF16("billingAddress");
72 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
74 AutofillScanner scanner(list_.get());
75 field_.reset(Parse(&scanner));
76 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
77 EXPECT_EQ(AddressField::kBillingAddress, field_->FindType());
78 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
80 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
81 EXPECT_EQ(ADDRESS_BILLING_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
84 TEST_F(AddressFieldTest, ParseOneLineAddressShipping) {
86 field.form_control_type = "text";
88 field.label = ASCIIToUTF16("Address");
89 field.name = ASCIIToUTF16("shippingAddress");
90 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
92 AutofillScanner scanner(list_.get());
93 field_.reset(Parse(&scanner));
94 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
95 EXPECT_EQ(AddressField::kShippingAddress, field_->FindType());
96 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
98 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
99 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
102 TEST_F(AddressFieldTest, ParseTwoLineAddress) {
104 field.form_control_type = "text";
106 field.label = ASCIIToUTF16("Address");
107 field.name = ASCIIToUTF16("address");
108 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
110 field.label = base::string16();
111 field.name = base::string16();
112 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
114 AutofillScanner scanner(list_.get());
115 field_.reset(Parse(&scanner));
116 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
117 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
118 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
120 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
121 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
123 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
124 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
127 TEST_F(AddressFieldTest, ParseThreeLineAddress) {
129 field.form_control_type = "text";
131 field.label = ASCIIToUTF16("Address Line1");
132 field.name = ASCIIToUTF16("Address1");
133 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
135 field.label = ASCIIToUTF16("Address Line2");
136 field.name = ASCIIToUTF16("Address2");
137 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
139 field.label = ASCIIToUTF16("Address Line3");
140 field.name = ASCIIToUTF16("Address3");
141 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr3")));
143 AutofillScanner scanner(list_.get());
144 field_.reset(Parse(&scanner));
145 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
146 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
147 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
149 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
150 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
152 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
153 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
155 field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end());
158 TEST_F(AddressFieldTest, ParseStreetAddressFromTextArea) {
160 field.form_control_type = "textarea";
162 field.label = ASCIIToUTF16("Address");
163 field.name = ASCIIToUTF16("address");
164 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr")));
166 AutofillScanner scanner(list_.get());
167 field_.reset(Parse(&scanner));
168 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
169 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
170 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
172 field_type_map_.find(ASCIIToUTF16("addr")) != field_type_map_.end());
173 // TODO(isherman): This should really be a field type that includes all the
174 // lines of the address.
175 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr")]);
178 TEST_F(AddressFieldTest, ParseCity) {
180 field.form_control_type = "text";
182 field.label = ASCIIToUTF16("City");
183 field.name = ASCIIToUTF16("city");
184 list_.push_back(new AutofillField(field, ASCIIToUTF16("city1")));
186 AutofillScanner scanner(list_.get());
187 field_.reset(Parse(&scanner));
188 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
189 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
190 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
192 field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end());
193 EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]);
196 TEST_F(AddressFieldTest, ParseState) {
198 field.form_control_type = "text";
200 field.label = ASCIIToUTF16("State");
201 field.name = ASCIIToUTF16("state");
202 list_.push_back(new AutofillField(field, ASCIIToUTF16("state1")));
204 AutofillScanner scanner(list_.get());
205 field_.reset(Parse(&scanner));
206 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
207 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
208 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
210 field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end());
211 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]);
214 TEST_F(AddressFieldTest, ParseZip) {
216 field.form_control_type = "text";
218 field.label = ASCIIToUTF16("Zip");
219 field.name = ASCIIToUTF16("zip");
220 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1")));
222 AutofillScanner scanner(list_.get());
223 field_.reset(Parse(&scanner));
224 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
225 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
226 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
228 field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end());
229 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]);
232 TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) {
234 field.form_control_type = "text";
236 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
237 field.name = ASCIIToUTF16("state");
238 list_.push_back(new AutofillField(field, ASCIIToUTF16("state")));
240 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
241 field.name = ASCIIToUTF16("zip");
242 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip")));
244 AutofillScanner scanner(list_.get());
245 field_.reset(Parse(&scanner));
246 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
247 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
248 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
250 field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end());
251 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]);
253 field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end());
254 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]);
257 TEST_F(AddressFieldTest, ParseCountry) {
259 field.form_control_type = "text";
261 field.label = ASCIIToUTF16("Country");
262 field.name = ASCIIToUTF16("country");
263 list_.push_back(new AutofillField(field, ASCIIToUTF16("country1")));
265 AutofillScanner scanner(list_.get());
266 field_.reset(Parse(&scanner));
267 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
268 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
269 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
271 field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end());
272 EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]);
275 TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) {
277 field.form_control_type = "text";
279 field.label = ASCIIToUTF16("Address");
280 field.name = ASCIIToUTF16("address");
281 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
283 field.label = base::string16();
284 field.name = ASCIIToUTF16("bogus");
285 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
287 AutofillScanner scanner(list_.get());
288 field_.reset(Parse(&scanner));
289 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
290 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
291 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
293 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
294 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
296 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
297 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
300 TEST_F(AddressFieldTest, ParseCompany) {
302 field.form_control_type = "text";
304 field.label = ASCIIToUTF16("Company");
305 field.name = ASCIIToUTF16("company");
306 list_.push_back(new AutofillField(field, ASCIIToUTF16("company1")));
308 AutofillScanner scanner(list_.get());
309 field_.reset(Parse(&scanner));
310 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
311 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
312 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
314 field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end());
315 EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]);
318 } // namespace autofill