name_field_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev// Copyright 2013 The Chromium Authors. All rights reserved.
23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev// Use of this source code is governed by a BSD-style license that can be
33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev// found in the LICENSE file.
43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "base/memory/scoped_ptr.h"
63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "base/memory/scoped_vector.h"
73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "base/strings/utf_string_conversions.h"
83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "components/autofill/core/browser/autofill_field.h"
93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "components/autofill/core/browser/autofill_scanner.h"
103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "components/autofill/core/browser/name_field.h"
113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "components/autofill/core/common/form_field_data.h"
123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "testing/gtest/include/gtest/gtest.h"
133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevusing base::ASCIIToUTF16;
153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevnamespace autofill {
173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevclass NameFieldTest : public testing::Test {
193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev public:
203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  NameFieldTest() {}
213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev protected:
233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ScopedVector<AutofillField> list_;
243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  scoped_ptr<NameField> field_;
253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ServerFieldTypeMap field_type_map_;
263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  // Downcast for tests.
283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  static NameField* Parse(AutofillScanner* scanner) {
293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    return static_cast<NameField*>(NameField::Parse(scanner));
303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  }
313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev private:
333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  DISALLOW_COPY_AND_ASSIGN(NameFieldTest);
343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstMiddleLast) {
373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("First Name");
413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("First");
423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Middle Name");
453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("Middle");
463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Last Name");
493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("Last");
503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
673aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstMiddleLast2) {
683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("firstName");
733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("middleName");
773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("lastName");
813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
983aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstLast) {
993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1223aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstLast2) {
1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Name");
1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Name");
1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1463aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstLastMiddleWithSpaces) {
1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("First  Name");
1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Middle  Name");
1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("middle_name");
1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Last  Name");
1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE, field_type_map_[ASCIIToUTF16("name2")]);
1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1773aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstLastEmpty) {
1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Name");
1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    field.label = base::string16();
1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name2")]);
1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2013aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, FirstMiddleLastEmpty) {
2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Name");
2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("middle_name");
2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
2123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2323aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, MiddleInitial) {
2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("First Name");
2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
2393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("MI");
2413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("middle_name");
2423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
2433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("Last Name");
2453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("last_name");
2463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
2473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
2493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
2503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
2513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
2543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
2553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
2573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
2583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
2593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
2603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
2613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
2623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2633aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, MiddleInitialNoLastName) {
2643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
2653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
2663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("First Name");
2683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("first_name");
2693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
2703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = ASCIIToUTF16("MI");
2723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("middle_name");
2733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
2743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
2763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
2773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_EQ(static_cast<NameField*>(NULL), field_.get());
2783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
2793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev// This case is from the dell.com checkout page.  The middle initial "mi" string
2813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev// came at the end following other descriptive text.  http://crbug.com/45123.
2823aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevTEST_F(NameFieldTest, MiddleInitialAtEnd) {
2833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  FormFieldData field;
2843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.form_control_type = "text";
2853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
2873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("XXXnameXXXfirst");
2883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
2893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
2913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("XXXnameXXXmi");
2923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name2")));
2933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.label = base::string16();
2953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field.name = ASCIIToUTF16("XXXnameXXXlast");
2963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  list_.push_back(new AutofillField(field, ASCIIToUTF16("name3")));
2973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  AutofillScanner scanner(list_.get());
2993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  field_.reset(Parse(&scanner));
3003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_NE(static_cast<NameField*>(NULL), field_.get());
3013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
3023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
3033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
3043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_FIRST, field_type_map_[ASCIIToUTF16("name1")]);
3053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
3063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name2")) != field_type_map_.end());
3073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_MIDDLE_INITIAL, field_type_map_[ASCIIToUTF16("name2")]);
3083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ASSERT_TRUE(
3093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      field_type_map_.find(ASCIIToUTF16("name3")) != field_type_map_.end());
3103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  EXPECT_EQ(NAME_LAST, field_type_map_[ASCIIToUTF16("name3")]);
3113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
3123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}  // namespace autofill
3143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev