address_field_unittest.cc revision 3240926e260ce088908e02ac07a6cf7b0c0cbf44
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.
4
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"
14
15namespace autofill {
16
17class AddressFieldTest : public testing::Test {
18 public:
19  AddressFieldTest() {}
20
21 protected:
22  ScopedVector<const AutofillField> list_;
23  scoped_ptr<AddressField> field_;
24  ServerFieldTypeMap field_type_map_;
25
26  // Downcast for tests.
27  static AddressField* Parse(AutofillScanner* scanner) {
28    return static_cast<AddressField*>(AddressField::Parse(scanner));
29  }
30
31 private:
32  DISALLOW_COPY_AND_ASSIGN(AddressFieldTest);
33};
34
35TEST_F(AddressFieldTest, Empty) {
36  AutofillScanner scanner(list_.get());
37  field_.reset(Parse(&scanner));
38  ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
39}
40
41TEST_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());
46}
47
48TEST_F(AddressFieldTest, ParseOneLineAddress) {
49  FormFieldData field;
50  field.form_control_type = "text";
51
52  field.label = ASCIIToUTF16("Address");
53  field.name = ASCIIToUTF16("address");
54  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
55
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_));
61  ASSERT_TRUE(
62      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
63  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
64}
65
66TEST_F(AddressFieldTest, ParseOneLineAddressBilling) {
67  FormFieldData field;
68  field.form_control_type = "text";
69
70  field.label = ASCIIToUTF16("Address");
71  field.name = ASCIIToUTF16("billingAddress");
72  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
73
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_));
79  ASSERT_TRUE(
80      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
81  EXPECT_EQ(ADDRESS_BILLING_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
82}
83
84TEST_F(AddressFieldTest, ParseOneLineAddressShipping) {
85  FormFieldData field;
86  field.form_control_type = "text";
87
88  field.label = ASCIIToUTF16("Address");
89  field.name = ASCIIToUTF16("shippingAddress");
90  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
91
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_));
97  ASSERT_TRUE(
98      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
99  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
100}
101
102TEST_F(AddressFieldTest, ParseTwoLineAddress) {
103  FormFieldData field;
104  field.form_control_type = "text";
105
106  field.label = ASCIIToUTF16("Address");
107  field.name = ASCIIToUTF16("address");
108  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
109
110  field.label = base::string16();
111  field.name = base::string16();
112  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
113
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_));
119  ASSERT_TRUE(
120      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
121  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
122  ASSERT_TRUE(
123      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
124  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
125}
126
127TEST_F(AddressFieldTest, ParseThreeLineAddress) {
128  FormFieldData field;
129  field.form_control_type = "text";
130
131  field.label = ASCIIToUTF16("Address Line1");
132  field.name = ASCIIToUTF16("Address1");
133  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
134
135  field.label = ASCIIToUTF16("Address Line2");
136  field.name = ASCIIToUTF16("Address2");
137  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
138
139  field.label = ASCIIToUTF16("Address Line3");
140  field.name = ASCIIToUTF16("Address3");
141  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr3")));
142
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_));
148  ASSERT_TRUE(
149      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
150  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
151  ASSERT_TRUE(
152      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
153  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
154  ASSERT_TRUE(
155      field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end());
156}
157
158TEST_F(AddressFieldTest, ParseCity) {
159  FormFieldData field;
160  field.form_control_type = "text";
161
162  field.label = ASCIIToUTF16("City");
163  field.name = ASCIIToUTF16("city");
164  list_.push_back(new AutofillField(field, ASCIIToUTF16("city1")));
165
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_));
171  ASSERT_TRUE(
172      field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end());
173  EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]);
174}
175
176TEST_F(AddressFieldTest, ParseState) {
177  FormFieldData field;
178  field.form_control_type = "text";
179
180  field.label = ASCIIToUTF16("State");
181  field.name = ASCIIToUTF16("state");
182  list_.push_back(new AutofillField(field, ASCIIToUTF16("state1")));
183
184  AutofillScanner scanner(list_.get());
185  field_.reset(Parse(&scanner));
186  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
187  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
188  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
189  ASSERT_TRUE(
190      field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end());
191  EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]);
192}
193
194TEST_F(AddressFieldTest, ParseZip) {
195  FormFieldData field;
196  field.form_control_type = "text";
197
198  field.label = ASCIIToUTF16("Zip");
199  field.name = ASCIIToUTF16("zip");
200  list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1")));
201
202  AutofillScanner scanner(list_.get());
203  field_.reset(Parse(&scanner));
204  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
205  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
206  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
207  ASSERT_TRUE(
208      field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end());
209  EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]);
210}
211
212TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) {
213  FormFieldData field;
214  field.form_control_type = "text";
215
216  field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
217  field.name = ASCIIToUTF16("state");
218  list_.push_back(new AutofillField(field, ASCIIToUTF16("state")));
219
220  field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
221  field.name = ASCIIToUTF16("zip");
222  list_.push_back(new AutofillField(field, ASCIIToUTF16("zip")));
223
224  AutofillScanner scanner(list_.get());
225  field_.reset(Parse(&scanner));
226  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
227  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
228  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
229  ASSERT_TRUE(
230      field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end());
231  EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]);
232  ASSERT_TRUE(
233      field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end());
234  EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]);
235}
236
237TEST_F(AddressFieldTest, ParseCountry) {
238  FormFieldData field;
239  field.form_control_type = "text";
240
241  field.label = ASCIIToUTF16("Country");
242  field.name = ASCIIToUTF16("country");
243  list_.push_back(new AutofillField(field, ASCIIToUTF16("country1")));
244
245  AutofillScanner scanner(list_.get());
246  field_.reset(Parse(&scanner));
247  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
248  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
249  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
250  ASSERT_TRUE(
251      field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end());
252  EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]);
253}
254
255TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) {
256  FormFieldData field;
257  field.form_control_type = "text";
258
259  field.label = ASCIIToUTF16("Address");
260  field.name = ASCIIToUTF16("address");
261  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
262
263  field.label = base::string16();
264  field.name = ASCIIToUTF16("bogus");
265  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
266
267  AutofillScanner scanner(list_.get());
268  field_.reset(Parse(&scanner));
269  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
270  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
271  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
272  ASSERT_TRUE(
273      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
274  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
275  ASSERT_TRUE(
276      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
277  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
278}
279
280TEST_F(AddressFieldTest, ParseCompany) {
281  FormFieldData field;
282  field.form_control_type = "text";
283
284  field.label = ASCIIToUTF16("Company");
285  field.name = ASCIIToUTF16("company");
286  list_.push_back(new AutofillField(field, ASCIIToUTF16("company1")));
287
288  AutofillScanner scanner(list_.get());
289  field_.reset(Parse(&scanner));
290  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
291  EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
292  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
293  ASSERT_TRUE(
294      field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end());
295  EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]);
296}
297
298}  // namespace autofill
299