blob: d6448cdf41df7013cbfe4c8198c504bb941bc37f [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]7519f1a2010-04-08 02:11:368#include "chrome/browser/autofill/autofill_field.h"
[email protected]2a958552011-05-05 04:01:219#include "chrome/browser/autofill/autofill_scanner.h"
[email protected]7519f1a2010-04-08 02:11:3610#include "chrome/browser/autofill/name_field.h"
[email protected]1ecbe862012-10-05 01:29:1411#include "chrome/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]7519f1a2010-04-08 02:11:3614class NameFieldTest : public testing::Test {
15 public:
16 NameFieldTest() {}
17
18 protected:
[email protected]2033dcf2011-05-27 01:47:4019 ScopedVector<const AutofillField> list_;
[email protected]7519f1a2010-04-08 02:11:3620 scoped_ptr<NameField> field_;
21 FieldTypeMap field_type_map_;
[email protected]2033dcf2011-05-27 01:47:4022
23 // Downcast for tests.
[email protected]194e46f32011-08-08 20:01:1824 static NameField* Parse(AutofillScanner* scanner) {
[email protected]7b4f0fd02013-02-21 05:51:2325 return static_cast<NameField*>(NameField::Parse(scanner));
[email protected]2033dcf2011-05-27 01:47:4026 }
[email protected]7519f1a2010-04-08 02:11:3627
28 private:
29 DISALLOW_COPY_AND_ASSIGN(NameFieldTest);
30};
31
32TEST_F(NameFieldTest, FirstMiddleLast) {
[email protected]1ecbe862012-10-05 01:29:1433 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2234 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4635
36 field.label = ASCIIToUTF16("First Name");
37 field.name = ASCIIToUTF16("First");
38 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
39
40 field.label = ASCIIToUTF16("Middle Name");
41 field.name = ASCIIToUTF16("Middle");
42 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
43
44 field.label = ASCIIToUTF16("Last Name");
45 field.name = ASCIIToUTF16("Last");
46 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
47
[email protected]2a958552011-05-05 04:01:2148 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1849 field_.reset(Parse(&scanner));
[email protected]7519f1a2010-04-08 02:11:3650 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4651 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]7519f1a2010-04-08 02:11:3652 ASSERT_TRUE(
53 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
54 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
55 ASSERT_TRUE(
56 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
57 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
58 ASSERT_TRUE(
59 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
60 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
61}
62
[email protected]f6f53bab2010-04-12 16:49:4763TEST_F(NameFieldTest, FirstMiddleLast2) {
[email protected]1ecbe862012-10-05 01:29:1464 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2265 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4666
67 field.label = string16();
68 field.name = ASCIIToUTF16("firstName");
69 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
70
71 field.label = string16();
72 field.name = ASCIIToUTF16("middleName");
73 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
74
75 field.label = string16();
76 field.name = ASCIIToUTF16("lastName");
77 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
78
[email protected]2a958552011-05-05 04:01:2179 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1880 field_.reset(Parse(&scanner));
[email protected]f6f53bab2010-04-12 16:49:4781 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4682 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]f6f53bab2010-04-12 16:49:4783 ASSERT_TRUE(
84 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
85 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
86 ASSERT_TRUE(
87 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
88 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
89 ASSERT_TRUE(
90 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
91 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
92}
93
[email protected]290838a2010-04-27 17:37:0194TEST_F(NameFieldTest, FirstLast) {
[email protected]1ecbe862012-10-05 01:29:1495 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2296 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4697
98 field.label = string16();
99 field.name = ASCIIToUTF16("first_name");
100 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
101
102 field.label = string16();
103 field.name = ASCIIToUTF16("last_name");
104 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
105
[email protected]2a958552011-05-05 04:01:21106 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18107 field_.reset(Parse(&scanner));
[email protected]290838a2010-04-27 17:37:01108 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46109 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]290838a2010-04-27 17:37:01110 ASSERT_TRUE(
111 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
112 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
113 ASSERT_TRUE(
114 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
115 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
116}
117
118TEST_F(NameFieldTest, FirstLast2) {
[email protected]1ecbe862012-10-05 01:29:14119 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22120 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46121
122 field.label = ASCIIToUTF16("Name");
123 field.name = ASCIIToUTF16("first_name");
124 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
125
126 field.label = ASCIIToUTF16("Name");
127 field.name = ASCIIToUTF16("last_name");
128 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
129
[email protected]2a958552011-05-05 04:01:21130 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18131 field_.reset(Parse(&scanner));
[email protected]290838a2010-04-27 17:37:01132 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46133 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]290838a2010-04-27 17:37:01134 ASSERT_TRUE(
135 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
136 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
137 ASSERT_TRUE(
138 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
139 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
140}
141
[email protected]44e621d2010-05-13 02:16:53142TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) {
[email protected]1ecbe862012-10-05 01:29:14143 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22144 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46145
146 field.label = ASCIIToUTF16("First Name");
147 field.name = ASCIIToUTF16("first_name");
148 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
149
150 field.label = ASCIIToUTF16("Middle Name");
151 field.name = ASCIIToUTF16("middle_name");
152 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
153
154 field.label = ASCIIToUTF16("Last Name");
155 field.name = ASCIIToUTF16("last_name");
156 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
157
[email protected]2a958552011-05-05 04:01:21158 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18159 field_.reset(Parse(&scanner));
[email protected]44e621d2010-05-13 02:16:53160 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46161 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]44e621d2010-05-13 02:16:53162 ASSERT_TRUE(
163 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
164 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
165 ASSERT_TRUE(
166 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
167 EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
168 ASSERT_TRUE(
169 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
170 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
171}
172
[email protected]51883692010-08-04 22:02:14173TEST_F(NameFieldTest, FirstLastEmpty) {
[email protected]1ecbe862012-10-05 01:29:14174 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22175 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46176
177 field.label = ASCIIToUTF16("Name");
178 field.name = ASCIIToUTF16("first_name");
179 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
180
181 field.label = string16();
182 field.name = ASCIIToUTF16("last_name");
183 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
184
[email protected]2a958552011-05-05 04:01:21185 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18186 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14187 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46188 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14189 ASSERT_TRUE(
190 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
191 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
192 ASSERT_TRUE(
193 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
194 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
195}
196
197TEST_F(NameFieldTest, FirstMiddleLastEmpty) {
[email protected]1ecbe862012-10-05 01:29:14198 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22199 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46200
201 field.label = ASCIIToUTF16("Name");
202 field.name = ASCIIToUTF16("first_name");
203 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
204
205 field.label = string16();
206 field.name = ASCIIToUTF16("middle_name");
207 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
208
209 field.label = string16();
210 field.name = ASCIIToUTF16("last_name");
211 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
212
[email protected]2a958552011-05-05 04:01:21213 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18214 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14215 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46216 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14217 ASSERT_TRUE(
218 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
219 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
220 ASSERT_TRUE(
221 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
222 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
223 ASSERT_TRUE(
224 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
225 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
226}
227
228TEST_F(NameFieldTest, MiddleInitial) {
[email protected]1ecbe862012-10-05 01:29:14229 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22230 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46231
232 field.label = ASCIIToUTF16("First Name");
233 field.name = ASCIIToUTF16("first_name");
234 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
235
236 field.label = ASCIIToUTF16("MI");
237 field.name = ASCIIToUTF16("middle_name");
238 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
239
240 field.label = ASCIIToUTF16("Last Name");
241 field.name = ASCIIToUTF16("last_name");
242 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
243
[email protected]2a958552011-05-05 04:01:21244 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18245 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14246 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46247 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]51883692010-08-04 22:02:14248 ASSERT_TRUE(
249 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
250 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
251 ASSERT_TRUE(
252 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
253 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
254 ASSERT_TRUE(
255 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
256 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
257}
258
259TEST_F(NameFieldTest, MiddleInitialNoLastName) {
[email protected]1ecbe862012-10-05 01:29:14260 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22261 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46262
263 field.label = ASCIIToUTF16("First Name");
264 field.name = ASCIIToUTF16("first_name");
265 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
266
267 field.label = ASCIIToUTF16("MI");
268 field.name = ASCIIToUTF16("middle_name");
269 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
270
[email protected]2a958552011-05-05 04:01:21271 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18272 field_.reset(Parse(&scanner));
[email protected]51883692010-08-04 22:02:14273 ASSERT_EQ(static_cast<NameField*>(NULL), field_.get());
274}
275
[email protected]fd529d62010-08-24 22:33:23276// This case is from the dell.com checkout page. The middle initial "mi" string
277// came at the end following other descriptive text. http://crbug.com/45123.
278TEST_F(NameFieldTest, MiddleInitialAtEnd) {
[email protected]1ecbe862012-10-05 01:29:14279 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22280 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46281
282 field.label = string16();
283 field.name = ASCIIToUTF16("XXXnameXXXfirst");
284 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
285
286 field.label = string16();
287 field.name = ASCIIToUTF16("XXXnameXXXmi");
288 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
289
290 field.label = string16();
291 field.name = ASCIIToUTF16("XXXnameXXXlast");
292 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
293
[email protected]2a958552011-05-05 04:01:21294 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18295 field_.reset(Parse(&scanner));
[email protected]fd529d62010-08-24 22:33:23296 ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46297 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]fd529d62010-08-24 22:33:23298 ASSERT_TRUE(
299 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
300 EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
301 ASSERT_TRUE(
302 field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
303 EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
304 ASSERT_TRUE(
305 field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
306 EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
307}