Chromium Code Reviews| 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/autofill_field.h" | 5 #include "components/autofill/core/browser/autofill_field.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 27 options16[i] = ASCIIToUTF16(options[i]); | 27 options16[i] = ASCIIToUTF16(options[i]); |
| 28 } | 28 } |
| 29 | 29 |
| 30 FormFieldData form_field; | 30 FormFieldData form_field; |
| 31 form_field.form_control_type = "select-one"; | 31 form_field.form_control_type = "select-one"; |
| 32 form_field.option_values = options16; | 32 form_field.option_values = options16; |
| 33 form_field.option_contents = options16; | 33 form_field.option_contents = options16; |
| 34 return form_field; | 34 return form_field; |
| 35 } | 35 } |
| 36 | 36 |
| 37 struct TestCase { | |
| 38 std::string card_number_; | |
| 39 int total_spilts_; | |
|
Ilya Sherman
2014/08/12 04:23:41
nit: Prefer size_t over int for all of the ints in
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 40 std::vector<int> splits_; | |
| 41 std::vector<std::string> expected_results_; | |
| 42 | |
| 43 size_t GetStartIndex(int index) { | |
| 44 size_t ret = 0; | |
| 45 for (int i = 0; i < index; i++) | |
|
Ilya Sherman
2014/08/12 04:23:42
nit: Prefer "++i" to "i++".
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 46 ret += splits_[i]; | |
| 47 return ret; | |
| 48 } | |
| 49 }; | |
|
Ilya Sherman
2014/08/12 04:23:41
It looks like this is only used in a single test,
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 50 | |
| 37 TEST(AutofillFieldTest, Type) { | 51 TEST(AutofillFieldTest, Type) { |
| 38 AutofillField field; | 52 AutofillField field; |
| 39 ASSERT_EQ(NO_SERVER_DATA, field.server_type()); | 53 ASSERT_EQ(NO_SERVER_DATA, field.server_type()); |
| 40 ASSERT_EQ(UNKNOWN_TYPE, field.heuristic_type()); | 54 ASSERT_EQ(UNKNOWN_TYPE, field.heuristic_type()); |
| 41 | 55 |
| 42 // |server_type_| is NO_SERVER_DATA, so |heuristic_type_| is returned. | 56 // |server_type_| is NO_SERVER_DATA, so |heuristic_type_| is returned. |
| 43 EXPECT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); | 57 EXPECT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); |
| 44 | 58 |
| 45 // Set the heuristic type and check it. | 59 // Set the heuristic type and check it. |
| 46 field.set_heuristic_type(NAME_FIRST); | 60 field.set_heuristic_type(NAME_FIRST); |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 496 | 510 |
| 497 AutofillField::FillFormField(field, | 511 AutofillField::FillFormField(field, |
| 498 UTF8ToUTF16("桜丘町26-1\n" | 512 UTF8ToUTF16("桜丘町26-1\n" |
| 499 "セルリアンタワー6階"), | 513 "セルリアンタワー6階"), |
| 500 "ja-JP", | 514 "ja-JP", |
| 501 "en-US", | 515 "en-US", |
| 502 &field); | 516 &field); |
| 503 EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value); | 517 EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value); |
| 504 } | 518 } |
| 505 | 519 |
| 520 TEST(AutofillFieldTest, FillCreditCardNumber) { | |
| 521 // Populate test cases. | |
| 522 std::vector<TestCase> test_cases; | |
| 523 | |
| 524 // Case 1: card number without any spilt. | |
| 525 TestCase test1; | |
| 526 test1.card_number_ = "4111111111111111"; | |
| 527 test1.total_spilts_ = 0; | |
| 528 test_cases.push_back(test1); | |
| 529 | |
| 530 // Case 2: card number broken up into four equal groups, of length 4. | |
| 531 test1.card_number_ = "5187654321098765"; | |
| 532 test1.total_spilts_ = 4; | |
| 533 int splits1[] = {4, 4, 4, 4}; | |
| 534 test1.splits_ = | |
| 535 std::vector<int>(splits1, splits1 + sizeof(splits1) / sizeof(int)); | |
|
Ilya Sherman
2014/08/12 04:23:42
nit: Please use the arraysize macro rather than im
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 536 std::string results1[] = {"5187654321098765", "654321098765", "21098765", | |
| 537 "8765"}; | |
|
Ilya Sherman
2014/08/12 04:23:41
Why aren't the expected results four digits each?
Pritam Nikam
2014/08/12 14:00:37
As we are not copying exact size substring, instea
| |
| 538 test1.expected_results_ = std::vector<std::string>( | |
| 539 results1, results1 + sizeof(results1) / sizeof(std::string)); | |
| 540 test_cases.push_back(test1); | |
| 541 | |
| 542 // Case 3: card with 15 digits number, broken up into three unequal groups, of | |
| 543 // lengths 4, 6, and 5. | |
|
Ilya Sherman
2014/08/12 04:23:41
Rather than writing a single TEST to cover three d
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 544 test1.card_number_ = "423456789012345"; | |
| 545 test1.total_spilts_ = 3; | |
| 546 int splits4[] = {4, 6, 5}; | |
| 547 test1.splits_ = | |
| 548 std::vector<int>(splits4, splits4 + sizeof(splits4) / sizeof(int)); | |
| 549 std::string results4[] = {"423456789012345", "56789012345", "12345"}; | |
| 550 test1.expected_results_ = std::vector<std::string>( | |
| 551 results4, results4 + sizeof(results4) / sizeof(std::string)); | |
| 552 test_cases.push_back(test1); | |
| 553 | |
| 554 // Start executing test cases to verify parts and full credit card number. | |
| 555 for (std::vector<TestCase>::iterator it = test_cases.begin(); | |
| 556 it != test_cases.end(); | |
| 557 ++it) { | |
| 558 TestCase current_case = *it; | |
| 559 | |
| 560 for (int i = 0; i < current_case.total_spilts_; i++) { | |
|
Ilya Sherman
2014/08/12 04:23:41
nit: Prefer "++i" to "i++".
Ilya Sherman
2014/08/12 04:23:42
nit: int -> size_t
Pritam Nikam
2014/08/12 14:00:37
Done.
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 561 AutofillField cc_number_part; | |
| 562 cc_number_part.SetHtmlType(HTML_TYPE_UNKNOWN, HtmlFieldMode()); | |
|
Ilya Sherman
2014/08/12 04:23:41
Does the test fail if you omit this line? If not,
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 563 cc_number_part.set_heuristic_type(CREDIT_CARD_NUMBER); | |
| 564 cc_number_part.label = ASCIIToUTF16("Card Number"); | |
| 565 std::ostringstream str; | |
| 566 str << "card_number_part" << i; | |
|
Ilya Sherman
2014/08/12 04:23:42
If you really need this, please use base::StringPr
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 567 cc_number_part.name = ASCIIToUTF16(str.str()); | |
|
Ilya Sherman
2014/08/12 04:23:42
Do you really need to set the name or label?
Pritam Nikam
2014/08/12 14:00:37
Done.
| |
| 568 cc_number_part.max_length = current_case.splits_[i]; | |
| 569 cc_number_part.set_credit_card_number_start_index( | |
| 570 current_case.GetStartIndex(i)); | |
| 571 | |
| 572 // Fill with a card-number; should fill just the card_number_part. | |
| 573 AutofillField::FillFormField(cc_number_part, | |
| 574 ASCIIToUTF16(current_case.card_number_), | |
| 575 "en-US", | |
| 576 "en-US", | |
| 577 &cc_number_part); | |
| 578 EXPECT_EQ(ASCIIToUTF16(current_case.expected_results_[i]), | |
| 579 cc_number_part.value); | |
| 580 } | |
| 581 | |
| 582 // Verify that full card-number shall get fill properly as well. | |
| 583 AutofillField cc_number_full; | |
| 584 cc_number_full.SetHtmlType(HTML_TYPE_UNKNOWN, HtmlFieldMode()); | |
| 585 cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER); | |
| 586 cc_number_full.label = ASCIIToUTF16("Card Number"); | |
| 587 cc_number_full.name = ASCIIToUTF16("card_number"); | |
| 588 AutofillField::FillFormField(cc_number_full, | |
| 589 ASCIIToUTF16(current_case.card_number_), | |
| 590 "en-US", | |
| 591 "en-US", | |
| 592 &cc_number_full); | |
| 593 EXPECT_EQ(ASCIIToUTF16(current_case.card_number_), cc_number_full.value); | |
| 594 } | |
| 595 } | |
| 596 | |
| 506 } // namespace | 597 } // namespace |
| 507 } // namespace autofill | 598 } // namespace autofill |
| OLD | NEW |