Index: chrome/browser/autofill/form_structure_browsertest.cc |
=================================================================== |
--- chrome/browser/autofill/form_structure_browsertest.cc (revision 67097) |
+++ chrome/browser/autofill/form_structure_browsertest.cc (working copy) |
@@ -4,20 +4,74 @@ |
#include <vector> |
+#include "base/file_path.h" |
+#include "base/path_service.h" |
+#include "base/string_util.h" |
+#include "base/utf_string_conversions.h" |
#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/common/chrome_paths.h" |
#include "chrome/test/in_process_browser_test.h" |
#include "chrome/test/ui_test_utils.h" |
#include "googleurl/src/gurl.h" |
+namespace { |
+ |
+FilePath GetInputFileDirectory() { |
+ FilePath test_data_dir_; |
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); |
+ test_data_dir_ = test_data_dir_.AppendASCII("autofill_heuristics") |
+ .AppendASCII("input"); |
+ return test_data_dir_; |
+} |
+ |
+FilePath GetOutputFileDirectory() { |
+ FilePath test_data_dir_; |
+ PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); |
+ test_data_dir_ = test_data_dir_.AppendASCII("autofill_heuristics") |
+ .AppendASCII("output"); |
+ return test_data_dir_; |
+} |
+ |
+// Write |content| to |file|. Returns true on success. |
+bool WriteFile(const FilePath& file, const std::string& content) { |
+ int write_size = file_util::WriteFile(file, content.c_str(), |
+ content.length()); |
+ return write_size == static_cast<int>(content.length()); |
+} |
+ |
+// Convert |html| to URL format, and return the converted string. |
+const std::string ConvertToURLFormat(const std::string& html) { |
+ return std::string("data:text/html;charset=utf-8,") + html; |
+} |
+ |
+// Compare |output_file_source| with |form_string|. Returns true when they are |
+// identical. |
+bool CompareText(const std::string& output_file_source, |
+ const std::string& form_string) { |
+ std::string output_file = output_file_source; |
+ std::string form = form_string; |
+ |
+ ReplaceSubstringsAfterOffset(&output_file, 0, "\r\n", " "); |
+ ReplaceSubstringsAfterOffset(&output_file, 0, "\r", " "); |
+ ReplaceSubstringsAfterOffset(&output_file, 0, "\n", " "); |
+ ReplaceSubstringsAfterOffset(&form, 0, "\n", " "); |
+ |
+ return (output_file == form); |
+} |
+ |
+} // namespace |
+ |
// 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. |
+// heuristics. A test inputs each form file(e.g. form_[language_code].html), |
+// loads its 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. |
+// If this is the first time test is run, a gold test result file is generated |
+// in output directory, else the form structures are compared against the |
+// existing result file. |
class FormStructureBrowserTest : public InProcessBrowserTest { |
public: |
FormStructureBrowserTest() {} |
@@ -51,8 +105,6 @@ |
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(); |
@@ -162,55 +214,53 @@ |
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>"))); |
+IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, HTMLFiles) { |
+ FilePath input_file_path = GetInputFileDirectory(); |
+ file_util::FileEnumerator input_file_enumerator(input_file_path, |
+ false, file_util::FileEnumerator::FILES, FILE_PATH_LITERAL("*.html")); |
+ |
+ for (input_file_path = input_file_enumerator.Next(); |
+ !input_file_path.empty(); |
+ input_file_path = input_file_enumerator.Next()) { |
+ std::string input_file_source; |
+ |
+ ASSERT_TRUE(file_util::ReadFileToString(input_file_path, |
+ &input_file_source)); |
+ input_file_source = ConvertToURLFormat(input_file_source); |
- 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)); |
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
+ browser(), GURL(input_file_source))); |
- 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"); |
+ 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)); |
- EXPECT_EQ(expected, FormStructureBrowserTest::FormStructuresToString(forms)); |
+ AutoFillManager* autofill_manager = |
+ browser()->GetSelectedTabContents()->GetAutoFillManager(); |
+ ASSERT_NE(static_cast<AutoFillManager*>(NULL), autofill_manager); |
+ std::vector<FormStructure*> forms = GetFormStructures(*autofill_manager); |
+ |
+ FilePath output_file_directory = GetOutputFileDirectory(); |
+ FilePath output_file_path = output_file_directory.Append( |
+ input_file_path.BaseName().StripTrailingSeparators().ReplaceExtension( |
+ FILE_PATH_LITERAL(".out"))); |
+ |
+ std::string output_file_source; |
+ if (file_util::ReadFileToString(output_file_path, &output_file_source)) { |
+ ASSERT_TRUE(CompareText( |
+ output_file_source, |
+ FormStructureBrowserTest::FormStructuresToString(forms))); |
+ |
+ } else { |
+ ASSERT_TRUE(WriteFile( |
+ output_file_path, |
+ FormStructureBrowserTest::FormStructuresToString(forms))); |
+ } |
+ } |
} |