Index: chrome/browser/autofill/form_structure_unittest.cc |
=================================================================== |
--- chrome/browser/autofill/form_structure_unittest.cc (revision 42702) |
+++ chrome/browser/autofill/form_structure_unittest.cc (working copy) |
@@ -384,4 +384,102 @@ |
EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(5)->heuristic_type()); |
} |
+// Tests a sequence of FormFields where only labels are supplied to heuristics |
+// for matching. This works because FormField labels are matched in the case |
+// that input element ids (or |name| fields) are missing. |
+TEST(FormStructureTest, HeuristicsLabelsOnly) { |
+ scoped_ptr<FormStructure> form_structure; |
+ webkit_glue::FormFieldValues values; |
+ |
+ values.method = ASCIIToUTF16("post"); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("EMail"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Phone"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Fax"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(ASCIIToUTF16("Zip code"), |
+ string16(), |
+ string16(), |
+ ASCIIToUTF16("text"), |
+ WebInputElement::Text)); |
+ values.elements.push_back(webkit_glue::FormField(string16(), |
+ ASCIIToUTF16("Submit"), |
+ string16(), |
+ ASCIIToUTF16("submit"), |
+ WebInputElement::Submit)); |
+ form_structure.reset(new FormStructure(values)); |
+ EXPECT_TRUE(form_structure->IsAutoFillable()); |
+ |
+ // Expect the correct number of fields. |
+ ASSERT_EQ(8UL, form_structure->field_count()); |
+ |
+ // Check that heuristics are initialized as UNKNOWN_TYPE. |
+ std::vector<AutoFillField*>::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<AutoFillField*>(NULL), *iter); |
+ } else { |
+ ASSERT_NE(static_cast<AutoFillField*>(NULL), *iter); |
+ EXPECT_EQ(UNKNOWN_TYPE, (*iter)->heuristic_type()); |
+ } |
+ } |
+ |
+ // Compute heuristic types. |
+ form_structure->GetHeuristicAutoFillTypes(); |
+ ASSERT_EQ(8U, form_structure->field_count()); |
+ |
+ // Check that heuristics are no longer UNKNOWN_TYPE. |
+ // First name. |
+ EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); |
+ // Last name. |
+ EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); |
+ // Email. |
+ EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type()); |
+ // Phone. |
+ EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, |
+ form_structure->field(3)->heuristic_type()); |
+ // Fax. Note, we don't currently match fax. |
+ EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); |
+ // Address. |
+ EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(5)->heuristic_type()); |
+ // Address Line 2. |
+ EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(6)->heuristic_type()); |
+ // Zip. |
+ EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); |
+} |
+ |
} // namespace |