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