- add sources.
[platform/framework/web/crosswalk.git] / src / components / autofill / core / browser / name_field_unittest.cc
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/utf_string_conversions.h"
8 #include "components/autofill/core/browser/autofill_field.h"
9 #include "components/autofill/core/browser/autofill_scanner.h"
10 #include "components/autofill/core/browser/name_field.h"
11 #include "components/autofill/core/common/form_field_data.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace autofill {
15
16 class NameFieldTest : public testing::Test {
17  public:
18   NameFieldTest() {}
19
20  protected:
21   ScopedVector<const AutofillField> list_;
22   scoped_ptr<NameField> field_;
23   ServerFieldTypeMap field_type_map_;
24
25   // Downcast for tests.
26   static NameField* Parse(AutofillScanner* scanner) {
27     return static_cast<NameField*>(NameField::Parse(scanner));
28   }
29
30  private:
31   DISALLOW_COPY_AND_ASSIGN(NameFieldTest);
32 };
33
34 TEST_F(NameFieldTest, FirstMiddleLast) {
35   FormFieldData field;
36   field.form_control_type = "text";
37
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
50   AutofillScanner scanner(list_.get());
51   field_.reset(Parse(&scanner));
52   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
53   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
54   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
65 TEST_F(NameFieldTest, FirstMiddleLast2) {
66   FormFieldData field;
67   field.form_control_type = "text";
68
69   field.label = base::string16();
70   field.name = ASCIIToUTF16("firstName");
71   list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
72
73   field.label = base::string16();
74   field.name = ASCIIToUTF16("middleName");
75   list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
76
77   field.label = base::string16();
78   field.name = ASCIIToUTF16("lastName");
79   list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
80
81   AutofillScanner scanner(list_.get());
82   field_.reset(Parse(&scanner));
83   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
84   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
85   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
96 TEST_F(NameFieldTest, FirstLast) {
97   FormFieldData field;
98   field.form_control_type = "text";
99
100   field.label = base::string16();
101   field.name = ASCIIToUTF16("first_name");
102   list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
103
104   field.label = base::string16();
105   field.name = ASCIIToUTF16("last_name");
106   list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
107
108   AutofillScanner scanner(list_.get());
109   field_.reset(Parse(&scanner));
110   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
111   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
112   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
120 TEST_F(NameFieldTest, FirstLast2) {
121   FormFieldData field;
122   field.form_control_type = "text";
123
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
132   AutofillScanner scanner(list_.get());
133   field_.reset(Parse(&scanner));
134   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
135   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
136   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
144 TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) {
145   FormFieldData field;
146   field.form_control_type = "text";
147
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
160   AutofillScanner scanner(list_.get());
161   field_.reset(Parse(&scanner));
162   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
163   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
164   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
175 TEST_F(NameFieldTest, FirstLastEmpty) {
176   FormFieldData field;
177   field.form_control_type = "text";
178
179   field.label = ASCIIToUTF16("Name");
180   field.name = ASCIIToUTF16("first_name");
181   list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
182
183     field.label = base::string16();
184   field.name = ASCIIToUTF16("last_name");
185   list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
186
187   AutofillScanner scanner(list_.get());
188   field_.reset(Parse(&scanner));
189   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
190   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
191   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
199 TEST_F(NameFieldTest, FirstMiddleLastEmpty) {
200   FormFieldData field;
201   field.form_control_type = "text";
202
203   field.label = ASCIIToUTF16("Name");
204   field.name = ASCIIToUTF16("first_name");
205   list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
206
207   field.label = base::string16();
208   field.name = ASCIIToUTF16("middle_name");
209   list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
210
211   field.label = base::string16();
212   field.name = ASCIIToUTF16("last_name");
213   list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
214
215   AutofillScanner scanner(list_.get());
216   field_.reset(Parse(&scanner));
217   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
218   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
219   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
230 TEST_F(NameFieldTest, MiddleInitial) {
231   FormFieldData field;
232   field.form_control_type = "text";
233
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
246   AutofillScanner scanner(list_.get());
247   field_.reset(Parse(&scanner));
248   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
249   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
250   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
261 TEST_F(NameFieldTest, MiddleInitialNoLastName) {
262   FormFieldData field;
263   field.form_control_type = "text";
264
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
273   AutofillScanner scanner(list_.get());
274   field_.reset(Parse(&scanner));
275   ASSERT_EQ(static_cast<NameField*>(NULL), field_.get());
276 }
277
278 // 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.
280 TEST_F(NameFieldTest, MiddleInitialAtEnd) {
281   FormFieldData field;
282   field.form_control_type = "text";
283
284   field.label = base::string16();
285   field.name = ASCIIToUTF16("XXXnameXXXfirst");
286   list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
287
288   field.label = base::string16();
289   field.name = ASCIIToUTF16("XXXnameXXXmi");
290   list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
291
292   field.label = base::string16();
293   field.name = ASCIIToUTF16("XXXnameXXXlast");
294   list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
295
296   AutofillScanner scanner(list_.get());
297   field_.reset(Parse(&scanner));
298   ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
299   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
300   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 }
310
311 }  // namespace autofill