| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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/utf_string_conversions.h" | |
| 8 #include "chrome/browser/autofill/autofill_field.h" | |
| 9 #include "chrome/browser/autofill/autofill_scanner.h" | |
| 10 #include "chrome/browser/autofill/name_field.h" | |
| 11 #include "components/autofill/common/form_field_data.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 | |
| 14 class NameFieldTest : public testing::Test { | |
| 15 public: | |
| 16 NameFieldTest() {} | |
| 17 | |
| 18 protected: | |
| 19 ScopedVector<const AutofillField> list_; | |
| 20 scoped_ptr<NameField> field_; | |
| 21 FieldTypeMap field_type_map_; | |
| 22 | |
| 23 // Downcast for tests. | |
| 24 static NameField* Parse(AutofillScanner* scanner) { | |
| 25 return static_cast<NameField*>(NameField::Parse(scanner)); | |
| 26 } | |
| 27 | |
| 28 private: | |
| 29 DISALLOW_COPY_AND_ASSIGN(NameFieldTest); | |
| 30 }; | |
| 31 | |
| 32 TEST_F(NameFieldTest, FirstMiddleLast) { | |
| 33 FormFieldData field; | |
| 34 field.form_control_type = "text"; | |
| 35 | |
| 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 | |
| 48 AutofillScanner scanner(list_.get()); | |
| 49 field_.reset(Parse(&scanner)); | |
| 50 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 51 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 52 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 | |
| 63 TEST_F(NameFieldTest, FirstMiddleLast2) { | |
| 64 FormFieldData field; | |
| 65 field.form_control_type = "text"; | |
| 66 | |
| 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 | |
| 79 AutofillScanner scanner(list_.get()); | |
| 80 field_.reset(Parse(&scanner)); | |
| 81 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 82 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 83 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 | |
| 94 TEST_F(NameFieldTest, FirstLast) { | |
| 95 FormFieldData field; | |
| 96 field.form_control_type = "text"; | |
| 97 | |
| 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 | |
| 106 AutofillScanner scanner(list_.get()); | |
| 107 field_.reset(Parse(&scanner)); | |
| 108 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 109 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 110 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 | |
| 118 TEST_F(NameFieldTest, FirstLast2) { | |
| 119 FormFieldData field; | |
| 120 field.form_control_type = "text"; | |
| 121 | |
| 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 | |
| 130 AutofillScanner scanner(list_.get()); | |
| 131 field_.reset(Parse(&scanner)); | |
| 132 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 133 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 134 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 | |
| 142 TEST_F(NameFieldTest, FirstLastMiddleWithSpaces) { | |
| 143 FormFieldData field; | |
| 144 field.form_control_type = "text"; | |
| 145 | |
| 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 | |
| 158 AutofillScanner scanner(list_.get()); | |
| 159 field_.reset(Parse(&scanner)); | |
| 160 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 161 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 162 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 | |
| 173 TEST_F(NameFieldTest, FirstLastEmpty) { | |
| 174 FormFieldData field; | |
| 175 field.form_control_type = "text"; | |
| 176 | |
| 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 | |
| 185 AutofillScanner scanner(list_.get()); | |
| 186 field_.reset(Parse(&scanner)); | |
| 187 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 188 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 189 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 | |
| 197 TEST_F(NameFieldTest, FirstMiddleLastEmpty) { | |
| 198 FormFieldData field; | |
| 199 field.form_control_type = "text"; | |
| 200 | |
| 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 | |
| 213 AutofillScanner scanner(list_.get()); | |
| 214 field_.reset(Parse(&scanner)); | |
| 215 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 216 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 217 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 | |
| 228 TEST_F(NameFieldTest, MiddleInitial) { | |
| 229 FormFieldData field; | |
| 230 field.form_control_type = "text"; | |
| 231 | |
| 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 | |
| 244 AutofillScanner scanner(list_.get()); | |
| 245 field_.reset(Parse(&scanner)); | |
| 246 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 247 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 248 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 | |
| 259 TEST_F(NameFieldTest, MiddleInitialNoLastName) { | |
| 260 FormFieldData field; | |
| 261 field.form_control_type = "text"; | |
| 262 | |
| 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 | |
| 271 AutofillScanner scanner(list_.get()); | |
| 272 field_.reset(Parse(&scanner)); | |
| 273 ASSERT_EQ(static_cast<NameField*>(NULL), field_.get()); | |
| 274 } | |
| 275 | |
| 276 // 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. | |
| 278 TEST_F(NameFieldTest, MiddleInitialAtEnd) { | |
| 279 FormFieldData field; | |
| 280 field.form_control_type = "text"; | |
| 281 | |
| 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 | |
| 294 AutofillScanner scanner(list_.get()); | |
| 295 field_.reset(Parse(&scanner)); | |
| 296 ASSERT_NE(static_cast<NameField*>(NULL), field_.get()); | |
| 297 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 298 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 } | |
| OLD | NEW |