| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/name_field.h" | 5 #include "components/autofill/core/browser/name_field.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <vector> |
| 8 | 9 |
| 9 #include "base/macros.h" | 10 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 11 #include "base/memory/scoped_vector.h" | |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "components/autofill/core/browser/autofill_field.h" | 13 #include "components/autofill/core/browser/autofill_field.h" |
| 14 #include "components/autofill/core/browser/autofill_scanner.h" | 14 #include "components/autofill/core/browser/autofill_scanner.h" |
| 15 #include "components/autofill/core/common/form_field_data.h" | 15 #include "components/autofill/core/common/form_field_data.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 using base::ASCIIToUTF16; | 18 using base::ASCIIToUTF16; |
| 19 | 19 |
| 20 namespace autofill { | 20 namespace autofill { |
| 21 | 21 |
| 22 class NameFieldTest : public testing::Test { | 22 class NameFieldTest : public testing::Test { |
| 23 public: | 23 public: |
| 24 NameFieldTest() {} | 24 NameFieldTest() {} |
| 25 | 25 |
| 26 protected: | 26 protected: |
| 27 ScopedVector<AutofillField> list_; | 27 std::vector<std::unique_ptr<AutofillField>> list_; |
| 28 std::unique_ptr<NameField> field_; | 28 std::unique_ptr<NameField> field_; |
| 29 FieldCandidatesMap field_candidates_map_; | 29 FieldCandidatesMap field_candidates_map_; |
| 30 | 30 |
| 31 // Downcast for tests. | 31 // Downcast for tests. |
| 32 static std::unique_ptr<NameField> Parse(AutofillScanner* scanner) { | 32 static std::unique_ptr<NameField> Parse(AutofillScanner* scanner) { |
| 33 std::unique_ptr<FormField> field = NameField::Parse(scanner); | 33 std::unique_ptr<FormField> field = NameField::Parse(scanner); |
| 34 return base::WrapUnique(static_cast<NameField*>(field.release())); | 34 return base::WrapUnique(static_cast<NameField*>(field.release())); |
| 35 } | 35 } |
| 36 | 36 |
| 37 private: | 37 private: |
| 38 DISALLOW_COPY_AND_ASSIGN(NameFieldTest); | 38 DISALLOW_COPY_AND_ASSIGN(NameFieldTest); |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 TEST_F(NameFieldTest, FirstMiddleLast) { | 41 TEST_F(NameFieldTest, FirstMiddleLast) { |
| 42 FormFieldData field; | 42 FormFieldData field; |
| 43 field.form_control_type = "text"; | 43 field.form_control_type = "text"; |
| 44 | 44 |
| 45 field.label = ASCIIToUTF16("First Name"); | 45 field.label = ASCIIToUTF16("First Name"); |
| 46 field.name = ASCIIToUTF16("First"); | 46 field.name = ASCIIToUTF16("First"); |
| 47 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 47 list_.push_back( |
| 48 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 48 | 49 |
| 49 field.label = ASCIIToUTF16("Middle Name"); | 50 field.label = ASCIIToUTF16("Middle Name"); |
| 50 field.name = ASCIIToUTF16("Middle"); | 51 field.name = ASCIIToUTF16("Middle"); |
| 51 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 52 list_.push_back( |
| 53 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 52 | 54 |
| 53 field.label = ASCIIToUTF16("Last Name"); | 55 field.label = ASCIIToUTF16("Last Name"); |
| 54 field.name = ASCIIToUTF16("Last"); | 56 field.name = ASCIIToUTF16("Last"); |
| 55 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 57 list_.push_back( |
| 58 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 56 | 59 |
| 57 AutofillScanner scanner(list_.get()); | 60 AutofillScanner scanner(list_); |
| 58 field_ = Parse(&scanner); | 61 field_ = Parse(&scanner); |
| 59 ASSERT_NE(nullptr, field_.get()); | 62 ASSERT_NE(nullptr, field_.get()); |
| 60 field_->AddClassifications(&field_candidates_map_); | 63 field_->AddClassifications(&field_candidates_map_); |
| 61 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 64 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 62 field_candidates_map_.end()); | 65 field_candidates_map_.end()); |
| 63 EXPECT_EQ(NAME_FIRST, | 66 EXPECT_EQ(NAME_FIRST, |
| 64 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 67 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 65 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 68 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 66 field_candidates_map_.end()); | 69 field_candidates_map_.end()); |
| 67 EXPECT_EQ(NAME_MIDDLE, | 70 EXPECT_EQ(NAME_MIDDLE, |
| 68 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 71 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 69 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 72 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 70 field_candidates_map_.end()); | 73 field_candidates_map_.end()); |
| 71 EXPECT_EQ(NAME_LAST, | 74 EXPECT_EQ(NAME_LAST, |
| 72 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 75 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 73 } | 76 } |
| 74 | 77 |
| 75 TEST_F(NameFieldTest, FirstMiddleLast2) { | 78 TEST_F(NameFieldTest, FirstMiddleLast2) { |
| 76 FormFieldData field; | 79 FormFieldData field; |
| 77 field.form_control_type = "text"; | 80 field.form_control_type = "text"; |
| 78 | 81 |
| 79 field.label = base::string16(); | 82 field.label = base::string16(); |
| 80 field.name = ASCIIToUTF16("firstName"); | 83 field.name = ASCIIToUTF16("firstName"); |
| 81 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 84 list_.push_back( |
| 85 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 82 | 86 |
| 83 field.label = base::string16(); | 87 field.label = base::string16(); |
| 84 field.name = ASCIIToUTF16("middleName"); | 88 field.name = ASCIIToUTF16("middleName"); |
| 85 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 89 list_.push_back( |
| 90 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 86 | 91 |
| 87 field.label = base::string16(); | 92 field.label = base::string16(); |
| 88 field.name = ASCIIToUTF16("lastName"); | 93 field.name = ASCIIToUTF16("lastName"); |
| 89 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 94 list_.push_back( |
| 95 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 90 | 96 |
| 91 AutofillScanner scanner(list_.get()); | 97 AutofillScanner scanner(list_); |
| 92 field_ = Parse(&scanner); | 98 field_ = Parse(&scanner); |
| 93 ASSERT_NE(nullptr, field_.get()); | 99 ASSERT_NE(nullptr, field_.get()); |
| 94 field_->AddClassifications(&field_candidates_map_); | 100 field_->AddClassifications(&field_candidates_map_); |
| 95 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 101 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 96 field_candidates_map_.end()); | 102 field_candidates_map_.end()); |
| 97 EXPECT_EQ(NAME_FIRST, | 103 EXPECT_EQ(NAME_FIRST, |
| 98 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 104 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 99 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 105 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 100 field_candidates_map_.end()); | 106 field_candidates_map_.end()); |
| 101 EXPECT_EQ(NAME_MIDDLE, | 107 EXPECT_EQ(NAME_MIDDLE, |
| 102 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 108 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 103 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 109 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 104 field_candidates_map_.end()); | 110 field_candidates_map_.end()); |
| 105 EXPECT_EQ(NAME_LAST, | 111 EXPECT_EQ(NAME_LAST, |
| 106 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 112 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 107 } | 113 } |
| 108 | 114 |
| 109 TEST_F(NameFieldTest, FirstLast) { | 115 TEST_F(NameFieldTest, FirstLast) { |
| 110 FormFieldData field; | 116 FormFieldData field; |
| 111 field.form_control_type = "text"; | 117 field.form_control_type = "text"; |
| 112 | 118 |
| 113 field.label = base::string16(); | 119 field.label = base::string16(); |
| 114 field.name = ASCIIToUTF16("first_name"); | 120 field.name = ASCIIToUTF16("first_name"); |
| 115 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 121 list_.push_back( |
| 122 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 116 | 123 |
| 117 field.label = base::string16(); | 124 field.label = base::string16(); |
| 118 field.name = ASCIIToUTF16("last_name"); | 125 field.name = ASCIIToUTF16("last_name"); |
| 119 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 126 list_.push_back( |
| 127 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 120 | 128 |
| 121 AutofillScanner scanner(list_.get()); | 129 AutofillScanner scanner(list_); |
| 122 field_ = Parse(&scanner); | 130 field_ = Parse(&scanner); |
| 123 ASSERT_NE(nullptr, field_.get()); | 131 ASSERT_NE(nullptr, field_.get()); |
| 124 field_->AddClassifications(&field_candidates_map_); | 132 field_->AddClassifications(&field_candidates_map_); |
| 125 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 133 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 126 field_candidates_map_.end()); | 134 field_candidates_map_.end()); |
| 127 EXPECT_EQ(NAME_FIRST, | 135 EXPECT_EQ(NAME_FIRST, |
| 128 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 136 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 129 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 137 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 130 field_candidates_map_.end()); | 138 field_candidates_map_.end()); |
| 131 EXPECT_EQ(NAME_LAST, | 139 EXPECT_EQ(NAME_LAST, |
| 132 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 140 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 133 } | 141 } |
| 134 | 142 |
| 135 TEST_F(NameFieldTest, FirstLast2) { | 143 TEST_F(NameFieldTest, FirstLast2) { |
| 136 FormFieldData field; | 144 FormFieldData field; |
| 137 field.form_control_type = "text"; | 145 field.form_control_type = "text"; |
| 138 | 146 |
| 139 field.label = ASCIIToUTF16("Name"); | 147 field.label = ASCIIToUTF16("Name"); |
| 140 field.name = ASCIIToUTF16("first_name"); | 148 field.name = ASCIIToUTF16("first_name"); |
| 141 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 149 list_.push_back( |
| 150 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 142 | 151 |
| 143 field.label = ASCIIToUTF16("Name"); | 152 field.label = ASCIIToUTF16("Name"); |
| 144 field.name = ASCIIToUTF16("last_name"); | 153 field.name = ASCIIToUTF16("last_name"); |
| 145 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 154 list_.push_back( |
| 155 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 146 | 156 |
| 147 AutofillScanner scanner(list_.get()); | 157 AutofillScanner scanner(list_); |
| 148 field_ = Parse(&scanner); | 158 field_ = Parse(&scanner); |
| 149 ASSERT_NE(nullptr, field_.get()); | 159 ASSERT_NE(nullptr, field_.get()); |
| 150 field_->AddClassifications(&field_candidates_map_); | 160 field_->AddClassifications(&field_candidates_map_); |
| 151 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 161 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 152 field_candidates_map_.end()); | 162 field_candidates_map_.end()); |
| 153 EXPECT_EQ(NAME_FIRST, | 163 EXPECT_EQ(NAME_FIRST, |
| 154 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 164 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 155 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 165 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 156 field_candidates_map_.end()); | 166 field_candidates_map_.end()); |
| 157 EXPECT_EQ(NAME_LAST, | 167 EXPECT_EQ(NAME_LAST, |
| 158 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 168 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 159 } | 169 } |
| 160 | 170 |
| 161 TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) { | 171 TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) { |
| 162 FormFieldData field; | 172 FormFieldData field; |
| 163 field.form_control_type = "text"; | 173 field.form_control_type = "text"; |
| 164 | 174 |
| 165 field.label = ASCIIToUTF16("First Name"); | 175 field.label = ASCIIToUTF16("First Name"); |
| 166 field.name = ASCIIToUTF16("first_name"); | 176 field.name = ASCIIToUTF16("first_name"); |
| 167 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 177 list_.push_back( |
| 178 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 168 | 179 |
| 169 field.label = ASCIIToUTF16("Middle Name"); | 180 field.label = ASCIIToUTF16("Middle Name"); |
| 170 field.name = ASCIIToUTF16("middle_name"); | 181 field.name = ASCIIToUTF16("middle_name"); |
| 171 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 182 list_.push_back( |
| 183 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 172 | 184 |
| 173 field.label = ASCIIToUTF16("Last Name"); | 185 field.label = ASCIIToUTF16("Last Name"); |
| 174 field.name = ASCIIToUTF16("last_name"); | 186 field.name = ASCIIToUTF16("last_name"); |
| 175 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 187 list_.push_back( |
| 188 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 176 | 189 |
| 177 AutofillScanner scanner(list_.get()); | 190 AutofillScanner scanner(list_); |
| 178 field_ = Parse(&scanner); | 191 field_ = Parse(&scanner); |
| 179 ASSERT_NE(nullptr, field_.get()); | 192 ASSERT_NE(nullptr, field_.get()); |
| 180 field_->AddClassifications(&field_candidates_map_); | 193 field_->AddClassifications(&field_candidates_map_); |
| 181 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 194 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 182 field_candidates_map_.end()); | 195 field_candidates_map_.end()); |
| 183 EXPECT_EQ(NAME_FIRST, | 196 EXPECT_EQ(NAME_FIRST, |
| 184 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 197 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 185 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 198 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 186 field_candidates_map_.end()); | 199 field_candidates_map_.end()); |
| 187 EXPECT_EQ(NAME_MIDDLE, | 200 EXPECT_EQ(NAME_MIDDLE, |
| 188 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 201 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 189 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 202 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 190 field_candidates_map_.end()); | 203 field_candidates_map_.end()); |
| 191 EXPECT_EQ(NAME_LAST, | 204 EXPECT_EQ(NAME_LAST, |
| 192 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 205 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 193 } | 206 } |
| 194 | 207 |
| 195 TEST_F(NameFieldTest, FirstLastEmpty) { | 208 TEST_F(NameFieldTest, FirstLastEmpty) { |
| 196 FormFieldData field; | 209 FormFieldData field; |
| 197 field.form_control_type = "text"; | 210 field.form_control_type = "text"; |
| 198 | 211 |
| 199 field.label = ASCIIToUTF16("Name"); | 212 field.label = ASCIIToUTF16("Name"); |
| 200 field.name = ASCIIToUTF16("first_name"); | 213 field.name = ASCIIToUTF16("first_name"); |
| 201 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 214 list_.push_back( |
| 215 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 202 | 216 |
| 203 field.label = base::string16(); | 217 field.label = base::string16(); |
| 204 field.name = ASCIIToUTF16("last_name"); | 218 field.name = ASCIIToUTF16("last_name"); |
| 205 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 219 list_.push_back( |
| 220 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 206 | 221 |
| 207 AutofillScanner scanner(list_.get()); | 222 AutofillScanner scanner(list_); |
| 208 field_ = Parse(&scanner); | 223 field_ = Parse(&scanner); |
| 209 ASSERT_NE(nullptr, field_.get()); | 224 ASSERT_NE(nullptr, field_.get()); |
| 210 field_->AddClassifications(&field_candidates_map_); | 225 field_->AddClassifications(&field_candidates_map_); |
| 211 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 226 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 212 field_candidates_map_.end()); | 227 field_candidates_map_.end()); |
| 213 EXPECT_EQ(NAME_FIRST, | 228 EXPECT_EQ(NAME_FIRST, |
| 214 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 229 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 215 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 230 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 216 field_candidates_map_.end()); | 231 field_candidates_map_.end()); |
| 217 EXPECT_EQ(NAME_LAST, | 232 EXPECT_EQ(NAME_LAST, |
| 218 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 233 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 219 } | 234 } |
| 220 | 235 |
| 221 TEST_F(NameFieldTest, FirstMiddleLastEmpty) { | 236 TEST_F(NameFieldTest, FirstMiddleLastEmpty) { |
| 222 FormFieldData field; | 237 FormFieldData field; |
| 223 field.form_control_type = "text"; | 238 field.form_control_type = "text"; |
| 224 | 239 |
| 225 field.label = ASCIIToUTF16("Name"); | 240 field.label = ASCIIToUTF16("Name"); |
| 226 field.name = ASCIIToUTF16("first_name"); | 241 field.name = ASCIIToUTF16("first_name"); |
| 227 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 242 list_.push_back( |
| 243 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 228 | 244 |
| 229 field.label = base::string16(); | 245 field.label = base::string16(); |
| 230 field.name = ASCIIToUTF16("middle_name"); | 246 field.name = ASCIIToUTF16("middle_name"); |
| 231 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 247 list_.push_back( |
| 248 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 232 | 249 |
| 233 field.label = base::string16(); | 250 field.label = base::string16(); |
| 234 field.name = ASCIIToUTF16("last_name"); | 251 field.name = ASCIIToUTF16("last_name"); |
| 235 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 252 list_.push_back( |
| 253 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 236 | 254 |
| 237 AutofillScanner scanner(list_.get()); | 255 AutofillScanner scanner(list_); |
| 238 field_ = Parse(&scanner); | 256 field_ = Parse(&scanner); |
| 239 ASSERT_NE(nullptr, field_.get()); | 257 ASSERT_NE(nullptr, field_.get()); |
| 240 field_->AddClassifications(&field_candidates_map_); | 258 field_->AddClassifications(&field_candidates_map_); |
| 241 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 259 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 242 field_candidates_map_.end()); | 260 field_candidates_map_.end()); |
| 243 EXPECT_EQ(NAME_FIRST, | 261 EXPECT_EQ(NAME_FIRST, |
| 244 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 262 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 245 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 263 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 246 field_candidates_map_.end()); | 264 field_candidates_map_.end()); |
| 247 EXPECT_EQ(NAME_MIDDLE_INITIAL, | 265 EXPECT_EQ(NAME_MIDDLE_INITIAL, |
| 248 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 266 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 249 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 267 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 250 field_candidates_map_.end()); | 268 field_candidates_map_.end()); |
| 251 EXPECT_EQ(NAME_LAST, | 269 EXPECT_EQ(NAME_LAST, |
| 252 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 270 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 253 } | 271 } |
| 254 | 272 |
| 255 TEST_F(NameFieldTest, MiddleInitial) { | 273 TEST_F(NameFieldTest, MiddleInitial) { |
| 256 FormFieldData field; | 274 FormFieldData field; |
| 257 field.form_control_type = "text"; | 275 field.form_control_type = "text"; |
| 258 | 276 |
| 259 field.label = ASCIIToUTF16("First Name"); | 277 field.label = ASCIIToUTF16("First Name"); |
| 260 field.name = ASCIIToUTF16("first_name"); | 278 field.name = ASCIIToUTF16("first_name"); |
| 261 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 279 list_.push_back( |
| 280 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 262 | 281 |
| 263 field.label = ASCIIToUTF16("MI"); | 282 field.label = ASCIIToUTF16("MI"); |
| 264 field.name = ASCIIToUTF16("middle_name"); | 283 field.name = ASCIIToUTF16("middle_name"); |
| 265 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 284 list_.push_back( |
| 285 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 266 | 286 |
| 267 field.label = ASCIIToUTF16("Last Name"); | 287 field.label = ASCIIToUTF16("Last Name"); |
| 268 field.name = ASCIIToUTF16("last_name"); | 288 field.name = ASCIIToUTF16("last_name"); |
| 269 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 289 list_.push_back( |
| 290 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 270 | 291 |
| 271 AutofillScanner scanner(list_.get()); | 292 AutofillScanner scanner(list_); |
| 272 field_ = Parse(&scanner); | 293 field_ = Parse(&scanner); |
| 273 ASSERT_NE(nullptr, field_.get()); | 294 ASSERT_NE(nullptr, field_.get()); |
| 274 field_->AddClassifications(&field_candidates_map_); | 295 field_->AddClassifications(&field_candidates_map_); |
| 275 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 296 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 276 field_candidates_map_.end()); | 297 field_candidates_map_.end()); |
| 277 EXPECT_EQ(NAME_FIRST, | 298 EXPECT_EQ(NAME_FIRST, |
| 278 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 299 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 279 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 300 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 280 field_candidates_map_.end()); | 301 field_candidates_map_.end()); |
| 281 EXPECT_EQ(NAME_MIDDLE_INITIAL, | 302 EXPECT_EQ(NAME_MIDDLE_INITIAL, |
| 282 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 303 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 283 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 304 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 284 field_candidates_map_.end()); | 305 field_candidates_map_.end()); |
| 285 EXPECT_EQ(NAME_LAST, | 306 EXPECT_EQ(NAME_LAST, |
| 286 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 307 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 287 } | 308 } |
| 288 | 309 |
| 289 TEST_F(NameFieldTest, MiddleInitialNoLastName) { | 310 TEST_F(NameFieldTest, MiddleInitialNoLastName) { |
| 290 FormFieldData field; | 311 FormFieldData field; |
| 291 field.form_control_type = "text"; | 312 field.form_control_type = "text"; |
| 292 | 313 |
| 293 field.label = ASCIIToUTF16("First Name"); | 314 field.label = ASCIIToUTF16("First Name"); |
| 294 field.name = ASCIIToUTF16("first_name"); | 315 field.name = ASCIIToUTF16("first_name"); |
| 295 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 316 list_.push_back( |
| 317 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 296 | 318 |
| 297 field.label = ASCIIToUTF16("MI"); | 319 field.label = ASCIIToUTF16("MI"); |
| 298 field.name = ASCIIToUTF16("middle_name"); | 320 field.name = ASCIIToUTF16("middle_name"); |
| 299 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 321 list_.push_back( |
| 322 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 300 | 323 |
| 301 AutofillScanner scanner(list_.get()); | 324 AutofillScanner scanner(list_); |
| 302 field_ = Parse(&scanner); | 325 field_ = Parse(&scanner); |
| 303 ASSERT_EQ(nullptr, field_.get()); | 326 ASSERT_EQ(nullptr, field_.get()); |
| 304 } | 327 } |
| 305 | 328 |
| 306 // This case is from the dell.com checkout page. The middle initial "mi" string | 329 // This case is from the dell.com checkout page. The middle initial "mi" string |
| 307 // came at the end following other descriptive text. http://crbug.com/45123. | 330 // came at the end following other descriptive text. http://crbug.com/45123. |
| 308 TEST_F(NameFieldTest, MiddleInitialAtEnd) { | 331 TEST_F(NameFieldTest, MiddleInitialAtEnd) { |
| 309 FormFieldData field; | 332 FormFieldData field; |
| 310 field.form_control_type = "text"; | 333 field.form_control_type = "text"; |
| 311 | 334 |
| 312 field.label = base::string16(); | 335 field.label = base::string16(); |
| 313 field.name = ASCIIToUTF16("XXXnameXXXfirst"); | 336 field.name = ASCIIToUTF16("XXXnameXXXfirst"); |
| 314 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | 337 list_.push_back( |
| 338 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name1"))); |
| 315 | 339 |
| 316 field.label = base::string16(); | 340 field.label = base::string16(); |
| 317 field.name = ASCIIToUTF16("XXXnameXXXmi"); | 341 field.name = ASCIIToUTF16("XXXnameXXXmi"); |
| 318 list_.push_back(new AutofillField(field, ASCIIToUTF16("name2"))); | 342 list_.push_back( |
| 343 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name2"))); |
| 319 | 344 |
| 320 field.label = base::string16(); | 345 field.label = base::string16(); |
| 321 field.name = ASCIIToUTF16("XXXnameXXXlast"); | 346 field.name = ASCIIToUTF16("XXXnameXXXlast"); |
| 322 list_.push_back(new AutofillField(field, ASCIIToUTF16("name3"))); | 347 list_.push_back( |
| 348 base::MakeUnique<AutofillField>(field, ASCIIToUTF16("name3"))); |
| 323 | 349 |
| 324 AutofillScanner scanner(list_.get()); | 350 AutofillScanner scanner(list_); |
| 325 field_ = Parse(&scanner); | 351 field_ = Parse(&scanner); |
| 326 ASSERT_NE(nullptr, field_.get()); | 352 ASSERT_NE(nullptr, field_.get()); |
| 327 field_->AddClassifications(&field_candidates_map_); | 353 field_->AddClassifications(&field_candidates_map_); |
| 328 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != | 354 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name1")) != |
| 329 field_candidates_map_.end()); | 355 field_candidates_map_.end()); |
| 330 EXPECT_EQ(NAME_FIRST, | 356 EXPECT_EQ(NAME_FIRST, |
| 331 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); | 357 field_candidates_map_[ASCIIToUTF16("name1")].BestHeuristicType()); |
| 332 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != | 358 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name2")) != |
| 333 field_candidates_map_.end()); | 359 field_candidates_map_.end()); |
| 334 EXPECT_EQ(NAME_MIDDLE_INITIAL, | 360 EXPECT_EQ(NAME_MIDDLE_INITIAL, |
| 335 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); | 361 field_candidates_map_[ASCIIToUTF16("name2")].BestHeuristicType()); |
| 336 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != | 362 ASSERT_TRUE(field_candidates_map_.find(ASCIIToUTF16("name3")) != |
| 337 field_candidates_map_.end()); | 363 field_candidates_map_.end()); |
| 338 EXPECT_EQ(NAME_LAST, | 364 EXPECT_EQ(NAME_LAST, |
| 339 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); | 365 field_candidates_map_[ASCIIToUTF16("name3")].BestHeuristicType()); |
| 340 } | 366 } |
| 341 | 367 |
| 342 } // namespace autofill | 368 } // namespace autofill |
| OLD | NEW |