Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: components/autofill/core/browser/credit_card_unittest.cc

Issue 22009003: [Autofill] Distinguish between native field types and potentially HTML field types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/guid.h" 6 #include "base/guid.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "components/autofill/core/browser/autofill_common_test.h" 8 #include "components/autofill/core/browser/autofill_common_test.h"
9 #include "components/autofill/core/browser/autofill_type.h"
9 #include "components/autofill/core/browser/credit_card.h" 10 #include "components/autofill/core/browser/credit_card.h"
10 #include "components/autofill/core/browser/validation.h" 11 #include "components/autofill/core/browser/validation.h"
11 #include "components/autofill/core/common/form_field_data.h" 12 #include "components/autofill/core/common/form_field_data.h"
12 #include "grit/webkit_resources.h" 13 #include "grit/webkit_resources.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 namespace autofill { 16 namespace autofill {
16 namespace { 17 namespace {
17 18
18 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card _numbers.htm 19 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card _numbers.htm
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 321
321 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("7")); 322 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("7"));
322 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 323 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
323 EXPECT_EQ(7, card.expiration_month()); 324 EXPECT_EQ(7, card.expiration_month());
324 325
325 // This should fail, and preserve the previous value. 326 // This should fail, and preserve the previous value.
326 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January")); 327 card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"));
327 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 328 EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
328 EXPECT_EQ(7, card.expiration_month()); 329 EXPECT_EQ(7, card.expiration_month());
329 330
330 card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"), "en-US"); 331 card.SetInfo(
332 AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("January"), "en-US");
331 EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 333 EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
332 EXPECT_EQ(1, card.expiration_month()); 334 EXPECT_EQ(1, card.expiration_month());
333 335
334 card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("Apr"), "en-US"); 336 card.SetInfo(
337 AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("Apr"), "en-US");
335 EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH)); 338 EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
336 EXPECT_EQ(4, card.expiration_month()); 339 EXPECT_EQ(4, card.expiration_month());
337 } 340 }
338 341
339 TEST(CreditCardTest, CreditCardType) { 342 TEST(CreditCardTest, CreditCardType) {
340 CreditCard card(base::GenerateGUID(), "https://www.example.com/"); 343 CreditCard card(base::GenerateGUID(), "https://www.example.com/");
341 344
342 // The card type cannot be set directly. 345 // The card type cannot be set directly.
343 card.SetRawInfo(CREDIT_CARD_TYPE, ASCIIToUTF16("Visa")); 346 card.SetRawInfo(CREDIT_CARD_TYPE, ASCIIToUTF16("Visa"));
344 EXPECT_EQ(base::string16(), card.GetRawInfo(CREDIT_CARD_TYPE)); 347 EXPECT_EQ(base::string16(), card.GetRawInfo(CREDIT_CARD_TYPE));
(...skipping 21 matching lines...) Expand all
366 options[i] = ASCIIToUTF16(kMonthsNumeric[i]); 369 options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
367 } 370 }
368 371
369 FormFieldData field; 372 FormFieldData field;
370 field.form_control_type = "select-one"; 373 field.form_control_type = "select-one";
371 field.option_values = options; 374 field.option_values = options;
372 field.option_contents = options; 375 field.option_contents = options;
373 376
374 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 377 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
375 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 378 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
376 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 379 credit_card.FillSelectControl(
380 AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
377 EXPECT_EQ(ASCIIToUTF16("01"), field.value); 381 EXPECT_EQ(ASCIIToUTF16("01"), field.value);
378 } 382 }
379 383
380 TEST(CreditCardTest, CreditCardMonthAbbreviated) { 384 TEST(CreditCardTest, CreditCardMonthAbbreviated) {
381 const char* const kMonthsAbbreviated[] = { 385 const char* const kMonthsAbbreviated[] = {
382 "Jan", "Feb", "Mar", "Apr", "May", "Jun", 386 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
383 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 387 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
384 }; 388 };
385 std::vector<base::string16> options(arraysize(kMonthsAbbreviated)); 389 std::vector<base::string16> options(arraysize(kMonthsAbbreviated));
386 for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i) { 390 for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i) {
387 options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]); 391 options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]);
388 } 392 }
389 393
390 FormFieldData field; 394 FormFieldData field;
391 field.form_control_type = "select-one"; 395 field.form_control_type = "select-one";
392 field.option_values = options; 396 field.option_values = options;
393 field.option_contents = options; 397 field.option_contents = options;
394 398
395 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 399 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
396 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 400 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
397 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 401 credit_card.FillSelectControl(
402 AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
398 EXPECT_EQ(ASCIIToUTF16("Jan"), field.value); 403 EXPECT_EQ(ASCIIToUTF16("Jan"), field.value);
399 } 404 }
400 405
401 TEST(CreditCardTest, CreditCardMonthFull) { 406 TEST(CreditCardTest, CreditCardMonthFull) {
402 const char* const kMonthsFull[] = { 407 const char* const kMonthsFull[] = {
403 "January", "February", "March", "April", "May", "June", 408 "January", "February", "March", "April", "May", "June",
404 "July", "August", "September", "October", "November", "December", 409 "July", "August", "September", "October", "November", "December",
405 }; 410 };
406 std::vector<base::string16> options(arraysize(kMonthsFull)); 411 std::vector<base::string16> options(arraysize(kMonthsFull));
407 for (size_t i = 0; i < arraysize(kMonthsFull); ++i) { 412 for (size_t i = 0; i < arraysize(kMonthsFull); ++i) {
408 options[i] = ASCIIToUTF16(kMonthsFull[i]); 413 options[i] = ASCIIToUTF16(kMonthsFull[i]);
409 } 414 }
410 415
411 FormFieldData field; 416 FormFieldData field;
412 field.form_control_type = "select-one"; 417 field.form_control_type = "select-one";
413 field.option_values = options; 418 field.option_values = options;
414 field.option_contents = options; 419 field.option_contents = options;
415 420
416 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 421 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
417 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 422 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
418 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 423 credit_card.FillSelectControl(
424 AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
419 EXPECT_EQ(ASCIIToUTF16("January"), field.value); 425 EXPECT_EQ(ASCIIToUTF16("January"), field.value);
420 } 426 }
421 427
422 TEST(CreditCardTest, CreditCardMonthNumeric) { 428 TEST(CreditCardTest, CreditCardMonthNumeric) {
423 const char* const kMonthsNumeric[] = { 429 const char* const kMonthsNumeric[] = {
424 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 430 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
425 }; 431 };
426 std::vector<base::string16> options(arraysize(kMonthsNumeric)); 432 std::vector<base::string16> options(arraysize(kMonthsNumeric));
427 for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) { 433 for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i) {
428 options[i] = ASCIIToUTF16(kMonthsNumeric[i]); 434 options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
429 } 435 }
430 436
431 FormFieldData field; 437 FormFieldData field;
432 field.form_control_type = "select-one"; 438 field.form_control_type = "select-one";
433 field.option_values = options; 439 field.option_values = options;
434 field.option_contents = options; 440 field.option_contents = options;
435 441
436 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 442 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
437 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01")); 443 credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
438 credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field); 444 credit_card.FillSelectControl(
445 AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
439 EXPECT_EQ(ASCIIToUTF16("1"), field.value); 446 EXPECT_EQ(ASCIIToUTF16("1"), field.value);
440 } 447 }
441 448
442 TEST(CreditCardTest, CreditCardTwoDigitYear) { 449 TEST(CreditCardTest, CreditCardTwoDigitYear) {
443 const char* const kYears[] = { 450 const char* const kYears[] = {
444 "12", "13", "14", "15", "16", "17", "18", "19" 451 "12", "13", "14", "15", "16", "17", "18", "19"
445 }; 452 };
446 std::vector<base::string16> options(arraysize(kYears)); 453 std::vector<base::string16> options(arraysize(kYears));
447 for (size_t i = 0; i < arraysize(kYears); ++i) { 454 for (size_t i = 0; i < arraysize(kYears); ++i) {
448 options[i] = ASCIIToUTF16(kYears[i]); 455 options[i] = ASCIIToUTF16(kYears[i]);
449 } 456 }
450 457
451 FormFieldData field; 458 FormFieldData field;
452 field.form_control_type = "select-one"; 459 field.form_control_type = "select-one";
453 field.option_values = options; 460 field.option_values = options;
454 field.option_contents = options; 461 field.option_contents = options;
455 462
456 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 463 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
457 credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2017")); 464 credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2017"));
458 credit_card.FillSelectControl(CREDIT_CARD_EXP_4_DIGIT_YEAR, "en-US", &field); 465 credit_card.FillSelectControl(
466 AutofillType(CREDIT_CARD_EXP_4_DIGIT_YEAR), "en-US", &field);
459 EXPECT_EQ(ASCIIToUTF16("17"), field.value); 467 EXPECT_EQ(ASCIIToUTF16("17"), field.value);
460 EXPECT_EQ(2017, credit_card.expiration_year()); 468 EXPECT_EQ(2017, credit_card.expiration_year());
461 } 469 }
462 470
463 TEST(CreditCardTest, CreditCardTypeSelectControl) { 471 TEST(CreditCardTest, CreditCardTypeSelectControl) {
464 const char* const kCreditCardTypes[] = { 472 const char* const kCreditCardTypes[] = {
465 "Visa", "Master Card", "AmEx", "discover" 473 "Visa", "Master Card", "AmEx", "discover"
466 }; 474 };
467 std::vector<base::string16> options(arraysize(kCreditCardTypes)); 475 std::vector<base::string16> options(arraysize(kCreditCardTypes));
468 for (size_t i = 0; i < arraysize(kCreditCardTypes); ++i) { 476 for (size_t i = 0; i < arraysize(kCreditCardTypes); ++i) {
469 options[i] = ASCIIToUTF16(kCreditCardTypes[i]); 477 options[i] = ASCIIToUTF16(kCreditCardTypes[i]);
470 } 478 }
471 479
472 FormFieldData field; 480 FormFieldData field;
473 field.form_control_type = "select-one"; 481 field.form_control_type = "select-one";
474 field.option_values = options; 482 field.option_values = options;
475 field.option_contents = options; 483 field.option_contents = options;
476 484
477 // Credit card types are inferred from the numbers, so we use test numbers for 485 // Credit card types are inferred from the numbers, so we use test numbers for
478 // each card type. Test card numbers are drawn from 486 // each card type. Test card numbers are drawn from
479 // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_num bers.htm 487 // http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_num bers.htm
480 488
481 { 489 {
482 // Normal case: 490 // Normal case:
483 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 491 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
484 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 492 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
485 ASCIIToUTF16("4111111111111111")); 493 ASCIIToUTF16("4111111111111111"));
486 credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 494 credit_card.FillSelectControl(
495 AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
487 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); 496 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value);
488 } 497 }
489 498
490 { 499 {
491 // Filling should be able to handle intervening whitespace: 500 // Filling should be able to handle intervening whitespace:
492 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 501 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
493 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 502 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
494 ASCIIToUTF16("5105105105105100")); 503 ASCIIToUTF16("5105105105105100"));
495 credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 504 credit_card.FillSelectControl(
505 AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
496 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); 506 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value);
497 } 507 }
498 508
499 { 509 {
500 // American Express is sometimes abbreviated as AmEx: 510 // American Express is sometimes abbreviated as AmEx:
501 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 511 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
502 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("371449635398431")); 512 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("371449635398431"));
503 credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 513 credit_card.FillSelectControl(
514 AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
504 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); 515 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value);
505 } 516 }
506 517
507 { 518 {
508 // Case insensitivity: 519 // Case insensitivity:
509 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/"); 520 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
510 credit_card.SetRawInfo(CREDIT_CARD_NUMBER, 521 credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
511 ASCIIToUTF16("6011111111111117")); 522 ASCIIToUTF16("6011111111111117"));
512 credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field); 523 credit_card.FillSelectControl(
524 AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
513 EXPECT_EQ(ASCIIToUTF16("discover"), field.value); 525 EXPECT_EQ(ASCIIToUTF16("discover"), field.value);
514 } 526 }
515 } 527 }
516 528
517 TEST(CreditCardTest, GetCreditCardType) { 529 TEST(CreditCardTest, GetCreditCardType) {
518 struct { 530 struct {
519 std::string card_number; 531 std::string card_number;
520 std::string type; 532 std::string type;
521 bool is_valid; 533 bool is_valid;
522 } test_cases[] = { 534 } test_cases[] = {
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 684
673 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 685 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
674 base::string16 card_number = ASCIIToUTF16(test_cases[i].card_number); 686 base::string16 card_number = ASCIIToUTF16(test_cases[i].card_number);
675 SCOPED_TRACE(card_number); 687 SCOPED_TRACE(card_number);
676 EXPECT_EQ(test_cases[i].type, CreditCard::GetCreditCardType(card_number)); 688 EXPECT_EQ(test_cases[i].type, CreditCard::GetCreditCardType(card_number));
677 EXPECT_EQ(test_cases[i].is_valid, IsValidCreditCardNumber(card_number)); 689 EXPECT_EQ(test_cases[i].is_valid, IsValidCreditCardNumber(card_number));
678 } 690 }
679 } 691 }
680 692
681 } // namespace autofill 693 } // namespace autofill
OLDNEW
« no previous file with comments | « components/autofill/core/browser/credit_card_field_unittest.cc ('k') | components/autofill/core/browser/email_field.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698