From c8ccbfcbdaa3b2c62ca4ca63dae2db344345ab9d Mon Sep 17 00:00:00 2001 From: "jhawkins@chromium.org" Date: Fri, 23 Apr 2010 20:55:36 +0000 Subject: AutoFill: Try to parse a third address line and discard it if it exists. BUG=38327 TEST=FormManagerTest.ThreeAddressLines Review URL: http://codereview.chromium.org/1746004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45479 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/autofill/address_field.cc | 13 ++++++ chrome/browser/autofill/address_field_unittest.cc | 36 +++++++++++++++ chrome/browser/autofill/form_structure_unittest.cc | 51 ++++++++++++++++++++++ 3 files changed, 100 insertions(+) (limited to 'chrome/browser') diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc index 9567966..81d4aa1 100644 --- a/chrome/browser/autofill/address_field.cc +++ b/chrome/browser/autofill/address_field.cc @@ -218,6 +218,19 @@ bool AddressField::ParseAddressLines( if (!ParseEmptyText(iter, &address_field->address2_)) ParseText(iter, pattern, &address_field->address2_); + + // Try for a third line, which we will promptly discard. + if (address_field->address2_ != NULL) { + if (is_ecml) { + pattern = GetEcmlPattern(kEcmlShipToAddress3, + kEcmlBillToAddress3, '|'); + ParseText(iter, pattern); + } else { + pattern = ASCIIToUTF16("line3"); + ParseLabelText(iter, pattern, NULL); + } + } + return true; } diff --git a/chrome/browser/autofill/address_field_unittest.cc b/chrome/browser/autofill/address_field_unittest.cc index 7ecacbe..8b82dda 100644 --- a/chrome/browser/autofill/address_field_unittest.cc +++ b/chrome/browser/autofill/address_field_unittest.cc @@ -105,6 +105,42 @@ TEST_F(AddressFieldTest, ParseTwoLineAddress) { EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); } +TEST_F(AddressFieldTest, ParseThreeLineAddress) { + list_.push_back( + new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Address Line1"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text")), + ASCIIToUTF16("addr1"))); + list_.push_back( + new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Address Line2"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text")), + ASCIIToUTF16("addr2"))); + list_.push_back( + new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Address Line3"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text")), + ASCIIToUTF16("addr3"))); + list_.push_back(NULL); + iter_ = list_.begin(); + field_.reset(AddressField::Parse(&iter_, false)); + ASSERT_NE(static_cast(NULL), field_.get()); + EXPECT_EQ(kShippingAddress, field_->FindType()); + EXPECT_TRUE(field_->IsFullAddress()); + ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); + EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end()); + EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end()); +} + TEST_F(AddressFieldTest, ParseTwoLineAddressEcml) { list_.push_back( new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Address"), diff --git a/chrome/browser/autofill/form_structure_unittest.cc b/chrome/browser/autofill/form_structure_unittest.cc index 8230364..52f440d 100644 --- a/chrome/browser/autofill/form_structure_unittest.cc +++ b/chrome/browser/autofill/form_structure_unittest.cc @@ -667,4 +667,55 @@ TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); } +TEST(FormStructureTest, ThreeAddressLines) { + scoped_ptr form_structure; + FormData form; + + form.method = ASCIIToUTF16("post"); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Address Line1"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text"))); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Address Line2"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text"))); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Address Line3"), + ASCIIToUTF16("Address"), + string16(), + ASCIIToUTF16("text"))); + form_structure.reset(new FormStructure(form)); + EXPECT_TRUE(form_structure->IsAutoFillable()); + + // Check that heuristics are initialized as UNKNOWN_TYPE. + std::vector::const_iterator iter; + size_t i; + for (iter = form_structure->begin(), i = 0; + iter != form_structure->end(); + ++iter, ++i) { + // Expect last element to be NULL. + if (i == form_structure->field_count()) { + ASSERT_EQ(static_cast(NULL), *iter); + } else { + ASSERT_NE(static_cast(NULL), *iter); + EXPECT_EQ(UNKNOWN_TYPE, (*iter)->heuristic_type()); + } + } + + // Compute heuristic types. + form_structure->GetHeuristicAutoFillTypes(); + ASSERT_EQ(3U, form_structure->field_count()); + + // Check that heuristics are no longer UNKNOWN_TYPE. + // Address Line 1. + EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); + // Address Line 2. + EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); + // Address Line 3. + EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); +} + } // namespace -- cgit v1.1