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 "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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |