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

Unified Diff: chrome/browser/autofill/form_structure_browsertest.cc

Issue 5280001: Autofill i18n: Develop a system for validating Autofill heuristics from HTML input (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome
Patch Set: Typo. Created 10 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/form_structure_browsertest.cc
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dc6405284f45ca8e1fc853c88a0bb3c5b6fb05f8
--- /dev/null
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -0,0 +1,216 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <vector>
+
+#include "chrome/browser/autofill/autofill_manager.h"
+#include "chrome/browser/autofill/form_structure.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/test/in_process_browser_test.h"
+#include "chrome/test/ui_test_utils.h"
+#include "googleurl/src/gurl.h"
+
+// Test class for verifying proper form structure as determined by AutoFill
+// heuristics. After a test loads HTML content with a call to |NavigateToURL|
+// the |AutoFillManager| associated with the tab contents is queried for the
+// form structures that were loaded and parsed.
+// These form structures are serialized to string form and compared with
+// expected results.
+class FormStructureBrowserTest : public InProcessBrowserTest {
+ public:
+ FormStructureBrowserTest() {}
+ virtual ~FormStructureBrowserTest() {}
+
+ protected:
+ // Returns a vector of form structure objects associated with the given
+ // |autofill_manager|.
+ const std::vector<FormStructure*>& GetFormStructures(
+ const AutoFillManager& autofill_manager);
+
+ // Serializes the given form structures in |forms| to string form.
+ const std::string FormStructuresToString(
+ const std::vector<FormStructure*>& forms);
+
+ private:
+ // A helper utility for converting an |AutoFillFieldType| to string form.
+ const std::string AutoFillFieldTypeToString(AutoFillFieldType type);
+
+ DISALLOW_COPY_AND_ASSIGN(FormStructureBrowserTest);
+};
+
+const std::vector<FormStructure*>& FormStructureBrowserTest::GetFormStructures(
+ const AutoFillManager& autofill_manager) {
+ return autofill_manager.form_structures_.get();
+}
+
+const std::string FormStructureBrowserTest::FormStructuresToString(
+ const std::vector<FormStructure*>& forms) {
+ std::string forms_string;
+ for (std::vector<FormStructure*>::const_iterator iter = forms.begin();
+ iter != forms.end();
+ ++iter) {
+ forms_string += (*iter)->source_url().spec();
+ forms_string += "\n";
+
+ for (std::vector<AutoFillField*>::const_iterator field_iter =
+ (*iter)->begin();
+ field_iter != (*iter)->end();
+ ++field_iter) {
+ // The field list is NULL-terminated. Exit loop when at the end.
+ if (!*field_iter)
+ break;
+ forms_string += AutoFillFieldTypeToString((*field_iter)->type());
+ forms_string += "\n";
+ }
+ }
+ return forms_string;
+}
+
+const std::string FormStructureBrowserTest::AutoFillFieldTypeToString(
+ AutoFillFieldType type) {
+ switch (type) {
+ case NO_SERVER_DATA:
+ return "NO_SERVER_DATA";
+ case UNKNOWN_TYPE:
+ return "UNKNOWN_TYPE";
+ case EMPTY_TYPE:
+ return "EMPTY_TYPE";
+ case NAME_FIRST:
+ return "NAME_FIRST";
+ case NAME_MIDDLE:
+ return "NAME_MIDDLE";
+ case NAME_LAST:
+ return "NAME_LAST";
+ case NAME_MIDDLE_INITIAL:
+ return "NAME_MIDDLE_INITIAL";
+ case NAME_FULL:
+ return "NAME_FULL";
+ case NAME_SUFFIX:
+ return "NAME_SUFFIX";
+ case EMAIL_ADDRESS:
+ return "EMAIL_ADDRESS";
+ case PHONE_HOME_NUMBER:
+ return "PHONE_HOME_NUMBER";
+ case PHONE_HOME_CITY_CODE:
+ return "PHONE_HOME_CITY_CODE";
+ case PHONE_HOME_COUNTRY_CODE:
+ return "PHONE_HOME_COUNTRY_CODE";
+ case PHONE_HOME_CITY_AND_NUMBER:
+ return "PHONE_HOME_CITY_AND_NUMBER";
+ case PHONE_HOME_WHOLE_NUMBER:
+ return "PHONE_HOME_WHOLE_NUMBER";
+ case PHONE_FAX_NUMBER:
+ return "PHONE_FAX_NUMBER";
+ case PHONE_FAX_CITY_CODE:
+ return "PHONE_FAX_CITY_CODE";
+ case PHONE_FAX_COUNTRY_CODE:
+ return "PHONE_FAX_COUNTRY_CODE";
+ case PHONE_FAX_CITY_AND_NUMBER:
+ return "PHONE_FAX_CITY_AND_NUMBER";
+ case PHONE_FAX_WHOLE_NUMBER:
+ return "PHONE_FAX_WHOLE_NUMBER";
+ case ADDRESS_HOME_LINE1:
+ return "ADDRESS_HOME_LINE1";
+ case ADDRESS_HOME_LINE2:
+ return "ADDRESS_HOME_LINE2";
+ case ADDRESS_HOME_APT_NUM:
+ return "ADDRESS_HOME_APT_NUM";
+ case ADDRESS_HOME_CITY:
+ return "ADDRESS_HOME_CITY";
+ case ADDRESS_HOME_STATE:
+ return "ADDRESS_HOME_STATE";
+ case ADDRESS_HOME_ZIP:
+ return "ADDRESS_HOME_ZIP";
+ case ADDRESS_HOME_COUNTRY:
+ return "ADDRESS_HOME_COUNTRY";
+ case ADDRESS_BILLING_LINE1:
+ return "ADDRESS_BILLING_LINE1";
+ case ADDRESS_BILLING_LINE2:
+ return "ADDRESS_BILLING_LINE2";
+ case ADDRESS_BILLING_APT_NUM:
+ return "ADDRESS_BILLING_APT_NUM";
+ case ADDRESS_BILLING_CITY:
+ return "ADDRESS_BILLING_CITY";
+ case ADDRESS_BILLING_STATE:
+ return "ADDRESS_BILLING_STATE";
+ case ADDRESS_BILLING_ZIP:
+ return "ADDRESS_BILLING_ZIP";
+ case ADDRESS_BILLING_COUNTRY:
+ return "ADDRESS_BILLING_COUNTRY";
+ case CREDIT_CARD_NAME:
+ return "CREDIT_CARD_NAME";
+ case CREDIT_CARD_NUMBER:
+ return "CREDIT_CARD_NUMBER";
+ case CREDIT_CARD_EXP_MONTH:
+ return "CREDIT_CARD_EXP_MONTH";
+ case CREDIT_CARD_EXP_2_DIGIT_YEAR:
+ return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
+ case CREDIT_CARD_EXP_4_DIGIT_YEAR:
+ return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
+ case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
+ return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
+ case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
+ return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
+ case CREDIT_CARD_TYPE:
+ return "CREDIT_CARD_TYPE";
+ case CREDIT_CARD_VERIFICATION_CODE:
+ return "CREDIT_CARD_VERIFICATION_CODE";
+ case COMPANY_NAME:
+ return "COMPANY_NAME";
+ default:
+ NOTREACHED() << "Invalid AutoFillFieldType value.";
+ }
+
+ return std::string();
+}
+
+IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, BasicFormStructure) {
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
+ browser(), GURL("data:text/html;charset=utf-8,"
+ "<form action=\"http://www.google.com/\" method=\"POST\">"
+ "<label for=\"firstname\">First name:</label>"
+ " <input type=\"text\" id=\"firstname\"/><br />"
+ "<label for=\"lastname\">Last name:</label>"
+ " <input type=\"text\" id=\"lastname\" /><br />"
+ "<label for=\"address1\">Address line 1:</label>"
+ " <input type=\"text\" id=\"address1\" /><br />"
+ "<label for=\"address2\">Address line 2:</label>"
+ " <input type=\"text\" id=\"address2\" /><br />"
+ "<label for=\"city\">City:</label>"
+ " <input type=\"text\" id=\"city\" /><br />"
+ "</form>")));
+
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(),
+ VIEW_ID_TAB_CONTAINER));
+ ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(),
+ VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
+
+ AutoFillManager* autofill_manager =
+ browser()->GetSelectedTabContents()->GetAutoFillManager();
+ ASSERT_NE(static_cast<AutoFillManager*>(NULL), autofill_manager);
+ std::vector<FormStructure*> forms = GetFormStructures(*autofill_manager);
+ std::string expected("data:text/html;charset=utf-8,"
+ "<form action=\"http://www.google.com/\""
+ " method=\"POST\">"
+ "<label for=\"firstname\">First name:</label>"
+ " <input type=\"text\" id=\"firstname\"/><br />"
+ "<label for=\"lastname\">Last name:</label>"
+ " <input type=\"text\" id=\"lastname\" /><br />"
+ "<label for=\"address1\">Address line 1:</label>"
+ " <input type=\"text\" id=\"address1\" /><br />"
+ "<label for=\"address2\">Address line 2:</label>"
+ " <input type=\"text\" id=\"address2\" /><br />"
+ "<label for=\"city\">City:</label>"
+ " <input type=\"text\" id=\"city\" /><br />"
+ "</form>\n"
+ "NAME_FIRST\n"
+ "NAME_LAST\n"
+ "ADDRESS_HOME_LINE1\n"
+ "ADDRESS_HOME_LINE2\n"
+ "ADDRESS_HOME_CITY\n");
+
+ EXPECT_EQ(expected, FormStructureBrowserTest::FormStructuresToString(forms));
+}
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698