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

Side by Side Diff: chrome/browser/autofill/form_structure_unittest.cc

Issue 7613015: Add preliminary Autofill support for 'autocompletetype' sections. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Precompute credit card vs. address sections Created 9 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 (c) 2011 The Chromium Authors. All rights reserved. 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 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/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/string_util.h" 6 #include "base/string_util.h"
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/autofill/form_structure.h" 8 #include "chrome/browser/autofill/form_structure.h"
9 #include "googleurl/src/gurl.h" 9 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // Address. 332 // Address.
333 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(5)->heuristic_type()); 333 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(5)->heuristic_type());
334 // City. 334 // City.
335 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(6)->heuristic_type()); 335 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(6)->heuristic_type());
336 // Zip. 336 // Zip.
337 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); 337 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type());
338 // Submit. 338 // Submit.
339 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); 339 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type());
340 } 340 }
341 341
342 // Verify that we can correctly process the 'autocompletetype' attribute. 342 // Verify that we can correctly process the |autocompletetype| attribute.
343 TEST(FormStructureTest, HeuristicsAutocompletetype) { 343 TEST(FormStructureTest, HeuristicsAutocompletetype) {
344 scoped_ptr<FormStructure> form_structure; 344 scoped_ptr<FormStructure> form_structure;
345 FormData form; 345 FormData form;
346 form.method = ASCIIToUTF16("post"); 346 form.method = ASCIIToUTF16("post");
347 347
348 FormField field; 348 FormField field;
349 field.form_control_type = ASCIIToUTF16("text"); 349 field.form_control_type = ASCIIToUTF16("text");
350 350
351 field.label = string16(); 351 field.label = string16();
352 field.name = ASCIIToUTF16("field1"); 352 field.name = ASCIIToUTF16("field1");
(...skipping 16 matching lines...) Expand all
369 369
370 // Expect the correct number of fields. 370 // Expect the correct number of fields.
371 ASSERT_EQ(3U, form_structure->field_count()); 371 ASSERT_EQ(3U, form_structure->field_count());
372 ASSERT_EQ(3U, form_structure->autofill_count()); 372 ASSERT_EQ(3U, form_structure->autofill_count());
373 373
374 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); 374 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
375 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); 375 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
376 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type()); 376 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type());
377 } 377 }
378 378
379 // If at least one field includes the 'autocompletetype' attribute, we should 379 // If at least one field includes the |autocompletetype| attribute, we should
380 // not try to apply any other heuristics. 380 // not try to apply any other heuristics.
381 TEST(FormStructureTest, AutocompletetypeOverridesOtherHeuristics) { 381 TEST(FormStructureTest, AutocompletetypeOverridesOtherHeuristics) {
382 scoped_ptr<FormStructure> form_structure; 382 scoped_ptr<FormStructure> form_structure;
383 FormData form; 383 FormData form;
384 form.method = ASCIIToUTF16("post"); 384 form.method = ASCIIToUTF16("post");
385 385
386 // Start with a regular contact form. 386 // Start with a regular contact form.
387 FormField field; 387 FormField field;
388 field.form_control_type = ASCIIToUTF16("text"); 388 field.form_control_type = ASCIIToUTF16("text");
389 389
(...skipping 29 matching lines...) Expand all
419 EXPECT_FALSE(form_structure->ShouldBeCrowdsourced()); 419 EXPECT_FALSE(form_structure->ShouldBeCrowdsourced());
420 420
421 ASSERT_EQ(3U, form_structure->field_count()); 421 ASSERT_EQ(3U, form_structure->field_count());
422 ASSERT_EQ(0U, form_structure->autofill_count()); 422 ASSERT_EQ(0U, form_structure->autofill_count());
423 423
424 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(0)->heuristic_type()); 424 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(0)->heuristic_type());
425 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type()); 425 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type());
426 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); 426 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type());
427 } 427 }
428 428
429 // Verify that we can correctly process sections listed in the |autocomplete|
430 // attribute.
431 TEST(FormStructureTest, HeuristicsAutocompletetypeWithSections) {
432 scoped_ptr<FormStructure> form_structure;
433 FormData form;
434 form.method = ASCIIToUTF16("post");
435
436 FormField field;
437 field.form_control_type = ASCIIToUTF16("text");
438
439 // We expect "shipping" and "billing" to be the most common sections.
440 field.label = string16();
441 field.name = ASCIIToUTF16("field1");
442 field.autocomplete_type =
443 ASCIIToUTF16("section-shipping given-name");
dhollowa 2011/08/11 14:52:14 nit: indent (and below).
Ilya Sherman 2011/08/12 01:30:50 Done. Thanks for the catch =)
444 form.fields.push_back(field);
445
446 // Some field will have no section specified. These fall into the default
447 // section, with an empty name.
448 field.label = string16();
449 field.name = ASCIIToUTF16("field2");
450 field.autocomplete_type =
451 ASCIIToUTF16("surname");
452 form.fields.push_back(field);
453
454 // We allow arbitrary section names.
455 field.label = string16();
456 field.name = ASCIIToUTF16("field3");
457 field.autocomplete_type = ASCIIToUTF16("section-foo address-line1");
458 form.fields.push_back(field);
459
460 // Specifying "section-" is equivalent to not specifying a section.
461 field.label = string16();
462 field.name = ASCIIToUTF16("field4");
463 field.autocomplete_type =
464 ASCIIToUTF16("section- address-line2");
465 form.fields.push_back(field);
466
467 // We don't do anything clever to try to coalesce sections; it's up to site
468 // authors to avoid typos.
469 field.label = string16();
470 field.name = ASCIIToUTF16("field5");
471 field.autocomplete_type =
472 ASCIIToUTF16("section--shipping locality");
473 form.fields.push_back(field);
474
475 // Credit card fields are implicitly in a separate section from other fields.
476 field.label = string16();
477 field.name = ASCIIToUTF16("field6");
478 field.autocomplete_type =
479 ASCIIToUTF16("section-shipping cc-number");
480 form.fields.push_back(field);
481
482 form_structure.reset(new FormStructure(form));
483 form_structure->DetermineHeuristicTypes();
484 EXPECT_TRUE(form_structure->IsAutofillable(true));
485
486 // Expect the correct number of fields.
487 ASSERT_EQ(6U, form_structure->field_count());
488 ASSERT_EQ(6U, form_structure->autofill_count());
489
490 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
491 EXPECT_EQ(ASCIIToUTF16("shipping-default"),
492 form_structure->field(0)->section());
493 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
494 EXPECT_EQ(ASCIIToUTF16("-default"), form_structure->field(1)->section());
495 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(2)->heuristic_type());
496 EXPECT_EQ(ASCIIToUTF16("foo-default"), form_structure->field(2)->section());
497 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(3)->heuristic_type());
498 EXPECT_EQ(ASCIIToUTF16("-default"), form_structure->field(3)->section());
499 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type());
500 EXPECT_EQ(ASCIIToUTF16("-shipping-default"),
501 form_structure->field(4)->section());
502 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(5)->heuristic_type());
503 EXPECT_EQ(ASCIIToUTF16("shipping-cc"), form_structure->field(5)->section());
504 }
505
429 // Verify that we can correctly process fallback types listed in the 506 // Verify that we can correctly process fallback types listed in the
430 // 'autocompletetype' attribute. 507 // |autocompletetype| attribute.
431 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) { 508 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) {
432 scoped_ptr<FormStructure> form_structure; 509 scoped_ptr<FormStructure> form_structure;
433 FormData form; 510 FormData form;
434 form.method = ASCIIToUTF16("post"); 511 form.method = ASCIIToUTF16("post");
435 512
436 FormField field; 513 FormField field;
437 field.form_control_type = ASCIIToUTF16("text"); 514 field.form_control_type = ASCIIToUTF16("text");
438 515
439 // Skip over any sections and "x"-prefixed types. 516 // Skip over any sections and "x"-prefixed types.
440 field.label = string16(); 517 field.label = string16();
(...skipping 17 matching lines...) Expand all
458 535
459 form_structure.reset(new FormStructure(form)); 536 form_structure.reset(new FormStructure(form));
460 form_structure->DetermineHeuristicTypes(); 537 form_structure->DetermineHeuristicTypes();
461 EXPECT_TRUE(form_structure->IsAutofillable(true)); 538 EXPECT_TRUE(form_structure->IsAutofillable(true));
462 539
463 // Expect the correct number of fields. 540 // Expect the correct number of fields.
464 ASSERT_EQ(3U, form_structure->field_count()); 541 ASSERT_EQ(3U, form_structure->field_count());
465 ASSERT_EQ(3U, form_structure->autofill_count()); 542 ASSERT_EQ(3U, form_structure->autofill_count());
466 543
467 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); 544 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
545 EXPECT_EQ(ASCIIToUTF16("full-name-default"),
546 form_structure->field(0)->section());
468 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); 547 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
548 EXPECT_EQ(ASCIIToUTF16("full-name-default"),
549 form_structure->field(1)->section());
469 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, 550 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER,
470 form_structure->field(2)->heuristic_type()); 551 form_structure->field(2)->heuristic_type());
552 EXPECT_EQ(ASCIIToUTF16("shipping-default"),
553 form_structure->field(2)->section());
471 } 554 }
472 555
473 TEST(FormStructureTest, HeuristicsSample8) { 556 TEST(FormStructureTest, HeuristicsSample8) {
474 scoped_ptr<FormStructure> form_structure; 557 scoped_ptr<FormStructure> form_structure;
475 FormData form; 558 FormData form;
476 form.method = ASCIIToUTF16("post"); 559 form.method = ASCIIToUTF16("post");
477 560
478 FormField field; 561 FormField field;
479 field.form_control_type = ASCIIToUTF16("text"); 562 field.form_control_type = ASCIIToUTF16("text");
480 563
(...skipping 1427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 form_structure->FormSignature()); 1991 form_structure->FormSignature());
1909 1992
1910 form.name = ASCIIToUTF16("login_form"); 1993 form.name = ASCIIToUTF16("login_form");
1911 form_structure.reset(new FormStructure(form)); 1994 form_structure.reset(new FormStructure(form));
1912 EXPECT_EQ(FormStructureTest::Hash64Bit( 1995 EXPECT_EQ(FormStructureTest::Hash64Bit(
1913 std::string("https://login.facebook.com&login_form&email&first")), 1996 std::string("https://login.facebook.com&login_form&email&first")),
1914 form_structure->FormSignature()); 1997 form_structure->FormSignature());
1915 } 1998 }
1916 1999
1917 } // namespace 2000 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698