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