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

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: Minor cleanup 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");
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("field1");
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("field2");
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("field3");
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("field3");
471 field.autocomplete_type =
472 ASCIIToUTF16("section--shipping locality");
473 form.fields.push_back(field);
474
475 form_structure.reset(new FormStructure(form));
476 form_structure->DetermineHeuristicTypes();
477 EXPECT_TRUE(form_structure->IsAutofillable(true));
478
479 // Expect the correct number of fields.
480 ASSERT_EQ(5U, form_structure->field_count());
481 ASSERT_EQ(5U, form_structure->autofill_count());
482
483 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
484 EXPECT_EQ(ASCIIToUTF16("shipping"), form_structure->field(0)->section());
485 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
486 EXPECT_EQ(string16(), form_structure->field(1)->section());
487 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(2)->heuristic_type());
488 EXPECT_EQ(ASCIIToUTF16("foo"), form_structure->field(2)->section());
489 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(3)->heuristic_type());
490 EXPECT_EQ(string16(), form_structure->field(3)->section());
491 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type());
492 EXPECT_EQ(ASCIIToUTF16("-shipping"), form_structure->field(4)->section());
493 }
494
429 // Verify that we can correctly process fallback types listed in the 495 // Verify that we can correctly process fallback types listed in the
430 // 'autocompletetype' attribute. 496 // |autocompletetype| attribute.
431 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) { 497 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) {
432 scoped_ptr<FormStructure> form_structure; 498 scoped_ptr<FormStructure> form_structure;
433 FormData form; 499 FormData form;
434 form.method = ASCIIToUTF16("post"); 500 form.method = ASCIIToUTF16("post");
435 501
436 FormField field; 502 FormField field;
437 field.form_control_type = ASCIIToUTF16("text"); 503 field.form_control_type = ASCIIToUTF16("text");
438 504
439 // Skip over any sections and "x"-prefixed types. 505 // Skip over any sections and "x"-prefixed types.
440 field.label = string16(); 506 field.label = string16();
(...skipping 17 matching lines...) Expand all
458 524
459 form_structure.reset(new FormStructure(form)); 525 form_structure.reset(new FormStructure(form));
460 form_structure->DetermineHeuristicTypes(); 526 form_structure->DetermineHeuristicTypes();
461 EXPECT_TRUE(form_structure->IsAutofillable(true)); 527 EXPECT_TRUE(form_structure->IsAutofillable(true));
462 528
463 // Expect the correct number of fields. 529 // Expect the correct number of fields.
464 ASSERT_EQ(3U, form_structure->field_count()); 530 ASSERT_EQ(3U, form_structure->field_count());
465 ASSERT_EQ(3U, form_structure->autofill_count()); 531 ASSERT_EQ(3U, form_structure->autofill_count());
466 532
467 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); 533 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
534 EXPECT_EQ(ASCIIToUTF16("full-name"), form_structure->field(0)->section());
468 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); 535 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
536 EXPECT_EQ(ASCIIToUTF16("full-name"), form_structure->field(1)->section());
469 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, 537 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER,
470 form_structure->field(2)->heuristic_type()); 538 form_structure->field(2)->heuristic_type());
539 EXPECT_EQ(ASCIIToUTF16("shipping"), form_structure->field(2)->section());
471 } 540 }
472 541
473 TEST(FormStructureTest, HeuristicsSample8) { 542 TEST(FormStructureTest, HeuristicsSample8) {
474 scoped_ptr<FormStructure> form_structure; 543 scoped_ptr<FormStructure> form_structure;
475 FormData form; 544 FormData form;
476 form.method = ASCIIToUTF16("post"); 545 form.method = ASCIIToUTF16("post");
477 546
478 FormField field; 547 FormField field;
479 field.form_control_type = ASCIIToUTF16("text"); 548 field.form_control_type = ASCIIToUTF16("text");
480 549
(...skipping 1427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 form_structure->FormSignature()); 1977 form_structure->FormSignature());
1909 1978
1910 form.name = ASCIIToUTF16("login_form"); 1979 form.name = ASCIIToUTF16("login_form");
1911 form_structure.reset(new FormStructure(form)); 1980 form_structure.reset(new FormStructure(form));
1912 EXPECT_EQ(FormStructureTest::Hash64Bit( 1981 EXPECT_EQ(FormStructureTest::Hash64Bit(
1913 std::string("https://login.facebook.com&login_form&email&first")), 1982 std::string("https://login.facebook.com&login_form&email&first")),
1914 form_structure->FormSignature()); 1983 form_structure->FormSignature());
1915 } 1984 }
1916 1985
1917 } // namespace 1986 } // namespace
OLDNEW
« chrome/browser/autofill/autofill_manager.cc ('K') | « chrome/browser/autofill/form_structure.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698