blob: 1dce02802f3823a72340d4a82503de95ae44c1f7 [file] [log] [blame]
[email protected]c87481cd2011-03-04 12:29:571// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]7519f1a2010-04-08 02:11:362// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]3b63f8f42011-03-28 01:54:155#include "base/memory/scoped_ptr.h"
6#include "base/memory/scoped_vector.h"
[email protected]be1ce6a72010-08-03 14:35:227#include "base/utf_string_conversions.h"
[email protected]e4b2fa32013-03-09 22:56:568#include "components/autofill/browser/autofill_field.h"
9#include "components/autofill/browser/autofill_scanner.h"
10#include "components/autofill/browser/name_field.h"
[email protected]edf48d42013-03-07 05:44:4311#include "components/autofill/common/form_field_data.h"
[email protected]7519f1a2010-04-08 02:11:3612#include "testing/gtest/include/gtest/gtest.h"
[email protected]7519f1a2010-04-08 02:11:3613
[email protected]e217c5632013-04-12 19:11:4814namespace autofill {
15
[email protected]7519f1a2010-04-08 02:11:3616class NameFieldTest : public testing::Test {
17 public:
18 NameFieldTest() {}
19
20 protected:
[email protected]2033dcf2011-05-27 01:47:4021 ScopedVector<const AutofillField> list_;
[email protected]7519f1a2010-04-08 02:11:3622 scoped_ptr<NameField> field_;
23 FieldTypeMap field_type_map_;
[email protected]2033dcf2011-05-27 01:47:4024
25 // Downcast for tests.
[email protected]194e46f32011-08-08 20:01:1826 static NameField* Parse(AutofillScanner* scanner) {
[email protected]7b4f0fd02013-02-21 05:51:2327 return static_cast<NameField*>(NameField::Parse(scanner));
[email protected]2033dcf2011-05-27 01:47:4028 }
[email protected]7519f1a2010-04-08 02:11:3629
30 private:
31 DISALLOW_COPY_AND_ASSIGN(NameFieldTest);
32};
33
34TEST_F(NameFieldTest, FirstMiddleLast) {
[email protected]1ecbe862012-10-05 01:29:1435 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2236 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4637
38 field.label = ASCIIToUTF16("First Name");
39 field.name = ASCIIToUTF16("First");
40 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
41
42 field.label = ASCIIToUTF16("Middle Name");
43 field.name = ASCIIToUTF16("Middle");
44 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
45
46 field.label = ASCIIToUTF16("Last Name");
47 field.name = ASCIIToUTF16("Last");
48 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
49
[email protected]2a958552011-05-05 04:01:2150 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1851 field_.reset(Parse(&scanner));
[email protected]7519f1a2010-04-08 02:11:3652 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4653 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]7519f1a2010-04-08 02:11:3654 ASSERT_TRUE(
55 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
56 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
57 ASSERT_TRUE(
58 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
59 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
60 ASSERT_TRUE(
61 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
62 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
63}
64
[email protected]f6f53bab2010-04-12 16:49:4765TEST_F(NameFieldTest, FirstMiddleLast2) {
[email protected]1ecbe862012-10-05 01:29:1466 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2267 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4668
[email protected]d5ca8fb2013-04-11 17:54:3169 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:4670 field.name = ASCIIToUTF16("firstName");
71 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
72
[email protected]d5ca8fb2013-04-11 17:54:3173 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:4674 field.name = ASCIIToUTF16("middleName");
75 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
76
[email protected]d5ca8fb2013-04-11 17:54:3177 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:4678 field.name = ASCIIToUTF16("lastName");
79 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
80
[email protected]2a958552011-05-05 04:01:2181 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1882 field_.reset(Parse(&scanner));
[email protected]f6f53bab2010-04-12 16:49:4783 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4684 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]f6f53bab2010-04-12 16:49:4785 ASSERT_TRUE(
86 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
87 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
88 ASSERT_TRUE(
89 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
90 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
91 ASSERT_TRUE(
92 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
93 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
94}
95
[email protected]290838a2010-04-27 17:37:0196TEST_F(NameFieldTest, FirstLast) {
[email protected]1ecbe862012-10-05 01:29:1497 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2298 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4699
[email protected]d5ca8fb2013-04-11 17:54:31100 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46101 field.name = ASCIIToUTF16("first_name");
102 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
103
[email protected]d5ca8fb2013-04-11 17:54:31104 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46105 field.name = ASCIIToUTF16("last_name");
106 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
107
[email protected]2a958552011-05-05 04:01:21108 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18109 field_.reset(Parse(&scanner));
[email protected]290838a2010-04-27 17:37:01110 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46111 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]290838a2010-04-27 17:37:01112 ASSERT_TRUE(
113 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
114 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
115 ASSERT_TRUE(
116 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
117 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
118}
119
120TEST_F(NameFieldTest, FirstLast2) {
[email protected]1ecbe862012-10-05 01:29:14121 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22122 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46123
124 field.label = ASCIIToUTF16("Name");
125 field.name = ASCIIToUTF16("first_name");
126 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
127
128 field.label = ASCIIToUTF16("Name");
129 field.name = ASCIIToUTF16("last_name");
130 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
131
[email protected]2a958552011-05-05 04:01:21132 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18133 field_.reset(Parse(&scanner));
[email protected]290838a2010-04-27 17:37:01134 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46135 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]290838a2010-04-27 17:37:01136 ASSERT_TRUE(
137 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
138 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
139 ASSERT_TRUE(
140 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
141 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
142}
143
[email protected]44e621d2010-05-13 02:16:53144TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) {
[email protected]1ecbe862012-10-05 01:29:14145 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22146 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46147
148 field.label = ASCIIToUTF16("First Name");
149 field.name = ASCIIToUTF16("first_name");
150 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
151
152 field.label = ASCIIToUTF16("Middle Name");
153 field.name = ASCIIToUTF16("middle_name");
154 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
155
156 field.label = ASCIIToUTF16("Last Name");
157 field.name = ASCIIToUTF16("last_name");
158 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
159
[email protected]2a958552011-05-05 04:01:21160 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18161 field_.reset(Parse(&scanner));
[email protected]44e621d2010-05-13 02:16:53162 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46163 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]44e621d2010-05-13 02:16:53164 ASSERT_TRUE(
165 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
166 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
167 ASSERT_TRUE(
168 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
169 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
170 ASSERT_TRUE(
171 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
172 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
173}
174
[email protected]51883692010-08-04 22:02:14175TEST_F(NameFieldTest, FirstLastEmpty) {
[email protected]1ecbe862012-10-05 01:29:14176 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22177 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46178
179 field.label = ASCIIToUTF16("Name");
180 field.name = ASCIIToUTF16("first_name");
181 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
182
[email protected]d5ca8fb2013-04-11 17:54:31183 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46184 field.name = ASCIIToUTF16("last_name");
185 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
186
[email protected]2a958552011-05-05 04:01:21187 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18188 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14189 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46190 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14191 ASSERT_TRUE(
192 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
193 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
194 ASSERT_TRUE(
195 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
196 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
197}
198
199TEST_F(NameFieldTest, FirstMiddleLastEmpty) {
[email protected]1ecbe862012-10-05 01:29:14200 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22201 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46202
203 field.label = ASCIIToUTF16("Name");
204 field.name = ASCIIToUTF16("first_name");
205 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
206
[email protected]d5ca8fb2013-04-11 17:54:31207 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46208 field.name = ASCIIToUTF16("middle_name");
209 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
210
[email protected]d5ca8fb2013-04-11 17:54:31211 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46212 field.name = ASCIIToUTF16("last_name");
213 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
214
[email protected]2a958552011-05-05 04:01:21215 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18216 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14217 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46218 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14219 ASSERT_TRUE(
220 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
221 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
222 ASSERT_TRUE(
223 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
224 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
225 ASSERT_TRUE(
226 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
227 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
228}
229
230TEST_F(NameFieldTest, MiddleInitial) {
[email protected]1ecbe862012-10-05 01:29:14231 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22232 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46233
234 field.label = ASCIIToUTF16("First Name");
235 field.name = ASCIIToUTF16("first_name");
236 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
237
238 field.label = ASCIIToUTF16("MI");
239 field.name = ASCIIToUTF16("middle_name");
240 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
241
242 field.label = ASCIIToUTF16("Last Name");
243 field.name = ASCIIToUTF16("last_name");
244 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
245
[email protected]2a958552011-05-05 04:01:21246 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18247 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14248 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46249 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14250 ASSERT_TRUE(
251 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
252 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
253 ASSERT_TRUE(
254 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
255 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
256 ASSERT_TRUE(
257 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
258 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
259}
260
261TEST_F(NameFieldTest, MiddleInitialNoLastName) {
[email protected]1ecbe862012-10-05 01:29:14262 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22263 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46264
265 field.label = ASCIIToUTF16("First Name");
266 field.name = ASCIIToUTF16("first_name");
267 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
268
269 field.label = ASCIIToUTF16("MI");
270 field.name = ASCIIToUTF16("middle_name");
271 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
272
[email protected]2a958552011-05-05 04:01:21273 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18274 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14275 ASSERT_EQ(static_cast<NameField*>(NULL), field_.get());
276}
277
[email protected]fd529d62010-08-24 22:33:23278// This case is from the dell.com checkout page. The middle initial "mi" string
279// came at the end following other descriptive text. http://crbug.com/45123.
280TEST_F(NameFieldTest, MiddleInitialAtEnd) {
[email protected]1ecbe862012-10-05 01:29:14281 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22282 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46283
[email protected]d5ca8fb2013-04-11 17:54:31284 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46285 field.name = ASCIIToUTF16("XXXnameXXXfirst");
286 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
287
[email protected]d5ca8fb2013-04-11 17:54:31288 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46289 field.name = ASCIIToUTF16("XXXnameXXXmi");
290 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
291
[email protected]d5ca8fb2013-04-11 17:54:31292 field.label = base::string16();
[email protected]eb4b8b42011-08-09 01:33:46293 field.name = ASCIIToUTF16("XXXnameXXXlast");
294 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
295
[email protected]2a958552011-05-05 04:01:21296 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18297 field_.reset(Parse(&scanner));
[email protected]fd529d62010-08-24 22:33:23298 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46299 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]fd529d62010-08-24 22:33:23300 ASSERT_TRUE(
301 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
302 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
303 ASSERT_TRUE(
304 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
305 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
306 ASSERT_TRUE(
307 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
308 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
309}
[email protected]e217c5632013-04-12 19:11:48310
311} // namespace autofill