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/credit_card_field.h" 11 #include "components/autofill/core/common/form_field_data.h" 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 using base::ASCIIToUTF16; 15 16 namespace autofill { 17 18 class CreditCardFieldTest : public testing::Test { 19 public: 20 CreditCardFieldTest() {} 21 virtual ~CreditCardFieldTest() {} 22 23 protected: 24 ScopedVector<AutofillField> list_; 25 scoped_ptr<const CreditCardField> field_; 26 ServerFieldTypeMap field_type_map_; 27 28 // Parses the contents of |list_| as a form, and stores the result into 29 // |field_|. 30 void Parse() { 31 AutofillScanner scanner(list_.get()); 32 field_.reset( 33 static_cast<const CreditCardField*>(CreditCardField::Parse(&scanner))); 34 } 35 36 // Associates fields with their corresponding types, based on the previous 37 // call to Parse(). 38 bool ClassifyField() { 39 return field_->ClassifyField(&field_type_map_); 40 } 41 42 private: 43 DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest); 44 }; 45 46 TEST_F(CreditCardFieldTest, Empty) { 47 Parse(); 48 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 49 } 50 51 TEST_F(CreditCardFieldTest, NonParse) { 52 list_.push_back(new AutofillField); 53 Parse(); 54 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 55 } 56 57 TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) { 58 FormFieldData field; 59 field.form_control_type = "text"; 60 61 field.label = ASCIIToUTF16("Exp Month"); 62 field.name = ASCIIToUTF16("ccmonth"); 63 list_.push_back(new AutofillField(field, ASCIIToUTF16("month1"))); 64 65 field.label = ASCIIToUTF16("Exp Year"); 66 field.name = ASCIIToUTF16("ccyear"); 67 list_.push_back(new AutofillField(field, ASCIIToUTF16("year2"))); 68 69 Parse(); 70 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 71 } 72 73 TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) { 74 FormFieldData field; 75 field.form_control_type = "text"; 76 77 field.label = ASCIIToUTF16("Card Number"); 78 field.name = ASCIIToUTF16("card_number"); 79 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 80 81 Parse(); 82 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 83 } 84 85 TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) { 86 FormFieldData field; 87 field.form_control_type = "text"; 88 89 field.label = ASCIIToUTF16("Card Number"); 90 field.name = ASCIIToUTF16("card_number"); 91 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 92 93 field.label = ASCIIToUTF16("Exp Month"); 94 field.name = ASCIIToUTF16("ccmonth"); 95 list_.push_back(new AutofillField(field, ASCIIToUTF16("month2"))); 96 97 field.label = ASCIIToUTF16("Exp Year"); 98 field.name = ASCIIToUTF16("ccyear"); 99 list_.push_back(new AutofillField(field, ASCIIToUTF16("year3"))); 100 101 Parse(); 102 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 103 EXPECT_TRUE(ClassifyField()); 104 ASSERT_TRUE( 105 field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end()); 106 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]); 107 ASSERT_TRUE( 108 field_type_map_.find(ASCIIToUTF16("month2")) != field_type_map_.end()); 109 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]); 110 ASSERT_TRUE( 111 field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end()); 112 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 113 field_type_map_[ASCIIToUTF16("year3")]); 114 } 115 116 TEST_F(CreditCardFieldTest, ParseFullCreditCard) { 117 FormFieldData field; 118 field.form_control_type = "text"; 119 120 field.label = ASCIIToUTF16("Card Type"); 121 field.name = ASCIIToUTF16("card_type"); 122 list_.push_back(new AutofillField(field, ASCIIToUTF16("type"))); 123 124 field.label = ASCIIToUTF16("Name on Card"); 125 field.name = ASCIIToUTF16("name_on_card"); 126 list_.push_back(new AutofillField(field, ASCIIToUTF16("name"))); 127 128 field.label = ASCIIToUTF16("Card Number"); 129 field.name = ASCIIToUTF16("card_number"); 130 list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); 131 132 field.label = ASCIIToUTF16("Exp Month"); 133 field.name = ASCIIToUTF16("ccmonth"); 134 list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); 135 136 field.label = ASCIIToUTF16("Exp Year"); 137 field.name = ASCIIToUTF16("ccyear"); 138 list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); 139 140 field.label = ASCIIToUTF16("Verification"); 141 field.name = ASCIIToUTF16("verification"); 142 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc"))); 143 144 Parse(); 145 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 146 EXPECT_TRUE(ClassifyField()); 147 ASSERT_TRUE( 148 field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end()); 149 EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]); 150 ASSERT_TRUE( 151 field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end()); 152 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]); 153 ASSERT_TRUE( 154 field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end()); 155 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); 156 ASSERT_TRUE( 157 field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end()); 158 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); 159 ASSERT_TRUE( 160 field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end()); 161 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 162 field_type_map_[ASCIIToUTF16("year")]); 163 ASSERT_TRUE( 164 field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end()); 165 EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE, 166 field_type_map_[ASCIIToUTF16("cvc")]); 167 } 168 169 TEST_F(CreditCardFieldTest, ParseExpMonthYear) { 170 FormFieldData field; 171 field.form_control_type = "text"; 172 173 field.label = ASCIIToUTF16("Name on Card"); 174 field.name = ASCIIToUTF16("name_on_card"); 175 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 176 177 field.label = ASCIIToUTF16("Card Number"); 178 field.name = ASCIIToUTF16("card_number"); 179 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 180 181 field.label = ASCIIToUTF16("ExpDate Month / Year"); 182 field.name = ASCIIToUTF16("ExpDate"); 183 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); 184 185 field.label = ASCIIToUTF16("ExpDate Month / Year"); 186 field.name = ASCIIToUTF16("ExpDate"); 187 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); 188 189 Parse(); 190 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 191 EXPECT_TRUE(ClassifyField()); 192 ASSERT_TRUE( 193 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 194 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 195 ASSERT_TRUE( 196 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 197 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 198 ASSERT_TRUE( 199 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); 200 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); 201 ASSERT_TRUE( 202 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); 203 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 204 field_type_map_[ASCIIToUTF16("year4")]); 205 } 206 207 TEST_F(CreditCardFieldTest, ParseExpMonthYear2) { 208 FormFieldData field; 209 field.form_control_type = "text"; 210 211 field.label = ASCIIToUTF16("Name on Card"); 212 field.name = ASCIIToUTF16("name_on_card"); 213 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 214 215 field.label = ASCIIToUTF16("Card Number"); 216 field.name = ASCIIToUTF16("card_number"); 217 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 218 219 field.label = ASCIIToUTF16("Expiration date Month / Year"); 220 field.name = ASCIIToUTF16("ExpDate"); 221 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); 222 223 field.label = ASCIIToUTF16("Expiration date Month / Year"); 224 field.name = ASCIIToUTF16("ExpDate"); 225 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); 226 227 Parse(); 228 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 229 EXPECT_TRUE(ClassifyField()); 230 ASSERT_TRUE( 231 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 232 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 233 ASSERT_TRUE( 234 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 235 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 236 ASSERT_TRUE( 237 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); 238 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); 239 ASSERT_TRUE( 240 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); 241 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 242 field_type_map_[ASCIIToUTF16("year4")]); 243 } 244 245 TEST_F(CreditCardFieldTest, ParseExpField) { 246 FormFieldData field; 247 field.form_control_type = "text"; 248 249 field.label = ASCIIToUTF16("Name on Card"); 250 field.name = ASCIIToUTF16("name_on_card"); 251 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 252 253 field.label = ASCIIToUTF16("Card Number"); 254 field.name = ASCIIToUTF16("card_number"); 255 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 256 257 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)"); 258 field.name = ASCIIToUTF16("cc_exp"); 259 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); 260 261 Parse(); 262 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 263 EXPECT_TRUE(ClassifyField()); 264 ASSERT_TRUE( 265 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 266 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 267 ASSERT_TRUE( 268 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 269 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 270 ASSERT_TRUE( 271 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); 272 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 273 field_type_map_[ASCIIToUTF16("exp3")]); 274 } 275 276 TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) { 277 FormFieldData field; 278 field.form_control_type = "text"; 279 280 field.label = ASCIIToUTF16("Name on Card"); 281 field.name = ASCIIToUTF16("name_on_card"); 282 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 283 284 field.label = ASCIIToUTF16("Card Number"); 285 field.name = ASCIIToUTF16("card_number"); 286 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 287 288 field.label = ASCIIToUTF16("Expiration Date (MM/YY)"); 289 field.name = ASCIIToUTF16("cc_exp"); 290 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); 291 292 Parse(); 293 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 294 EXPECT_TRUE(ClassifyField()); 295 ASSERT_TRUE( 296 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 297 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 298 ASSERT_TRUE( 299 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 300 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 301 ASSERT_TRUE( 302 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); 303 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 304 field_type_map_[ASCIIToUTF16("exp3")]); 305 } 306 307 TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) { 308 FormFieldData field; 309 field.form_control_type = "text"; 310 311 field.label = ASCIIToUTF16("Name"); 312 field.name = ASCIIToUTF16("ccfullname"); 313 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 314 315 Parse(); 316 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 317 EXPECT_TRUE(ClassifyField()); 318 ASSERT_TRUE( 319 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 320 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 321 } 322 323 // Verifies that <input type="month"> controls are able to be parsed correctly. 324 TEST_F(CreditCardFieldTest, ParseMonthControl) { 325 FormFieldData field; 326 327 field.form_control_type = "text"; 328 field.label = ASCIIToUTF16("Card number:"); 329 field.name = ASCIIToUTF16("ccnumber"); 330 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 331 332 field.form_control_type = "month"; 333 field.label = ASCIIToUTF16("Expiration date:"); 334 field.name = ASCIIToUTF16("ccexp"); 335 list_.push_back(new AutofillField(field, ASCIIToUTF16("date2"))); 336 337 Parse(); 338 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 339 EXPECT_TRUE(ClassifyField()); 340 ASSERT_TRUE( 341 field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end()); 342 EXPECT_EQ(CREDIT_CARD_NUMBER, 343 field_type_map_[ASCIIToUTF16("number1")]); 344 ASSERT_TRUE( 345 field_type_map_.find(ASCIIToUTF16("date2")) != field_type_map_.end()); 346 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 347 field_type_map_[ASCIIToUTF16("date2")]); 348 } 349 350 // Verify that heuristics <input name="ccyear" maxlength="2"/> considers 351 // *maxlength* attribute while parsing 2 Digit expiration year. 352 TEST_F(CreditCardFieldTest, ParseCreditCardExpYear_2DigitMaxLength) { 353 FormFieldData field; 354 field.form_control_type = "text"; 355 356 field.label = ASCIIToUTF16("Card Number"); 357 field.name = ASCIIToUTF16("card_number"); 358 list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); 359 360 field.label = ASCIIToUTF16("Expiration Date"); 361 field.name = ASCIIToUTF16("ccmonth"); 362 list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); 363 364 field.name = ASCIIToUTF16("ccyear"); 365 field.max_length = 2; 366 list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); 367 368 Parse(); 369 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 370 EXPECT_TRUE(ClassifyField()); 371 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number")) != 372 field_type_map_.end()); 373 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); 374 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month")) != 375 field_type_map_.end()); 376 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); 377 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year")) != 378 field_type_map_.end()); 379 EXPECT_EQ(CREDIT_CARD_EXP_2_DIGIT_YEAR, 380 field_type_map_[ASCIIToUTF16("year")]); 381 } 382 383 TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithSplit) { 384 FormFieldData field; 385 field.form_control_type = "text"; 386 387 field.label = ASCIIToUTF16("Card Number"); 388 field.name = ASCIIToUTF16("card_number_q1"); 389 field.max_length = 4; 390 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 391 392 field.label = ASCIIToUTF16("Card Number"); 393 field.name = ASCIIToUTF16("card_number_q2"); 394 field.max_length = 4; 395 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 396 397 field.label = ASCIIToUTF16("Card Number"); 398 field.name = ASCIIToUTF16("card_number_q3"); 399 field.max_length = 4; 400 list_.push_back(new AutofillField(field, ASCIIToUTF16("number3"))); 401 402 // For last credit card number input field it simply ignores the |max_length| 403 // attribute. So even having a very big number, does not conside it an invalid 404 // split for autofilling. 405 field.label = ASCIIToUTF16("Card Number"); 406 field.name = ASCIIToUTF16("card_number_q4"); 407 field.max_length = 20; 408 list_.push_back(new AutofillField(field, ASCIIToUTF16("number4"))); 409 410 field.label = ASCIIToUTF16("Exp Month"); 411 field.name = ASCIIToUTF16("ccmonth"); 412 list_.push_back(new AutofillField(field, ASCIIToUTF16("month5"))); 413 414 field.label = ASCIIToUTF16("Exp Year"); 415 field.name = ASCIIToUTF16("ccyear"); 416 list_.push_back(new AutofillField(field, ASCIIToUTF16("year6"))); 417 418 Parse(); 419 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 420 EXPECT_TRUE(ClassifyField()); 421 422 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number1")) != 423 field_type_map_.end()); 424 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]); 425 EXPECT_EQ(0U, list_[0]->credit_card_number_offset()); 426 427 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) != 428 field_type_map_.end()); 429 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 430 EXPECT_EQ(4U, list_[1]->credit_card_number_offset()); 431 432 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) != 433 field_type_map_.end()); 434 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number3")]); 435 EXPECT_EQ(8U, list_[2]->credit_card_number_offset()); 436 437 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number4")) != 438 field_type_map_.end()); 439 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number4")]); 440 EXPECT_EQ(12U, list_[3]->credit_card_number_offset()); 441 442 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month5")) != 443 field_type_map_.end()); 444 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month5")]); 445 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year6")) != 446 field_type_map_.end()); 447 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 448 field_type_map_[ASCIIToUTF16("year6")]); 449 } 450 451 TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithInvalidSplit) { 452 FormFieldData field; 453 field.form_control_type = "text"; 454 455 field.label = ASCIIToUTF16("Name on Card"); 456 field.name = ASCIIToUTF16("name_on_card"); 457 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 458 459 field.label = ASCIIToUTF16("Card Number"); 460 field.name = ASCIIToUTF16("card_number"); 461 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 462 463 field.label = ASCIIToUTF16("Not Card Number"); 464 field.name = ASCIIToUTF16("not_card_number"); 465 list_.push_back(new AutofillField(field, ASCIIToUTF16("number3"))); 466 467 field.label = ASCIIToUTF16("Exp Month"); 468 field.name = ASCIIToUTF16("ccmonth"); 469 list_.push_back(new AutofillField(field, ASCIIToUTF16("month4"))); 470 471 field.label = ASCIIToUTF16("Exp Year"); 472 field.name = ASCIIToUTF16("ccyear"); 473 list_.push_back(new AutofillField(field, ASCIIToUTF16("year5"))); 474 475 Parse(); 476 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 477 EXPECT_TRUE(ClassifyField()); 478 479 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("name1")) != 480 field_type_map_.end()); 481 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 482 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) == 483 field_type_map_.end()); 484 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) == 485 field_type_map_.end()); 486 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month4")) != 487 field_type_map_.end()); 488 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month4")]); 489 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year5")) != 490 field_type_map_.end()); 491 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 492 field_type_map_[ASCIIToUTF16("year5")]); 493 } 494 495 } // namespace autofill 496