diff options
author | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-29 17:58:52 +0000 |
---|---|---|
committer | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-29 17:58:52 +0000 |
commit | 95de1c9581a5ea2da8b6062b68b7147585c43bdb (patch) | |
tree | db19b2432268e49c70493346aaa744ad1ef73e6b /chrome/worker | |
parent | af2fd777dae98b84279707490382002276dfc006 (diff) | |
download | chromium_src-95de1c9581a5ea2da8b6062b68b7147585c43bdb.zip chromium_src-95de1c9581a5ea2da8b6062b68b7147585c43bdb.tar.gz chromium_src-95de1c9581a5ea2da8b6062b68b7147585c43bdb.tar.bz2 |
Support running http layout tests for workers in UI test framework.
BUG=none
TEST=This is a UI test.
Nicolas, could you please review DEPS? I added a couple of new lines to DEPS in order to fetch a copy the following directory into UI test data directory:
LayoutTests/http/tests/resources
LayoutTests/http/tests/workers
LayoutTests/http/tests/xmlhttprequest
Review URL: http://codereview.chromium.org/147125
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19502 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/worker')
-rw-r--r-- | chrome/worker/worker_uitest.cc | 143 |
1 files changed, 107 insertions, 36 deletions
diff --git a/chrome/worker/worker_uitest.cc b/chrome/worker/worker_uitest.cc index a49663f..a48c131 100644 --- a/chrome/worker/worker_uitest.cc +++ b/chrome/worker/worker_uitest.cc @@ -28,7 +28,7 @@ const char kPlatformName[] = "chromium-linux"; const char kTestCompleteCookie[] = "status"; const char kTestCompleteSuccess[] = "OK"; const int kTestIntervalMs = 250; -const int kTestWaitTimeoutMs = 30 * 1000; +const int kTestWaitTimeoutMs = 60 * 1000; class WorkerTest : public UITest { protected: @@ -37,11 +37,12 @@ class WorkerTest : public UITest { void RunTest(const std::wstring& test_case); - void InitializeForLayoutTest(const FilePath& test_case_dir); - void RunLayoutTest(const std::string& test_case_file_name); - void RunHttpTest(const std::string& test_case_name); + void InitializeForLayoutTest(const FilePath& test_parent_dir, + const FilePath& test_case_dir, + bool is_http_test); + void RunLayoutTest(const std::string& test_case_file_name, bool is_http_test); - private: + protected: bool ReadExpectedResult(const FilePath& result_dir_path, const std::string test_case_file_name, std::string* expected_result_value); @@ -50,6 +51,8 @@ class WorkerTest : public UITest { int test_count_; FilePath temp_test_dir_; FilePath layout_test_dir_; + FilePath test_case_dir_; + FilePath new_http_root_dir_; FilePath new_layout_test_dir_; FilePath rebase_result_dir_; std::string layout_test_controller_; @@ -76,20 +79,9 @@ void WorkerTest::RunTest(const std::wstring& test_case) { ASSERT_STREQ(kTestCompleteSuccess, value.c_str()); } -void WorkerTest::RunHttpTest(const std::string& test_case_name) { - scoped_refptr<TabProxy> tab(GetActiveTab()); - - std::string test_url_string(std::string("http://localhost:8080/") + - test_case_name); - GURL url(test_url_string); - ASSERT_TRUE(tab->NavigateToURL(url)); - - std::string value = WaitUntilCookieNonEmpty(tab.get(), url, - kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs); - ASSERT_STREQ(kTestCompleteSuccess, value.c_str()); -} - -void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { +void WorkerTest::InitializeForLayoutTest(const FilePath& test_parent_dir, + const FilePath& test_case_dir, + bool is_http_test) { FilePath src_dir; PathService::Get(base::DIR_SOURCE_ROOT, &src_dir); @@ -101,8 +93,21 @@ void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { layout_test_dir_ = layout_test_dir_.AppendASCII("test"); layout_test_dir_ = layout_test_dir_.AppendASCII("data"); layout_test_dir_ = layout_test_dir_.AppendASCII("workers"); + layout_test_dir_ = layout_test_dir_.Append(test_parent_dir); layout_test_dir_ = layout_test_dir_.Append(test_case_dir); + // If not found, try to use the original copy of WebKit layout tests for + // workers. For testing only in local machine only. + // webkit/data/layout_tests/LayoutTests/.../workers + if (!file_util::DirectoryExists(layout_test_dir_)) { + layout_test_dir_ = src_dir.AppendASCII("webkit"); + layout_test_dir_ = layout_test_dir_.AppendASCII("data"); + layout_test_dir_ = layout_test_dir_.AppendASCII("layout_tests"); + layout_test_dir_ = layout_test_dir_.Append(test_parent_dir); + layout_test_dir_ = layout_test_dir_.Append(test_case_dir); + ASSERT_TRUE(file_util::DirectoryExists(layout_test_dir_)); + } + // Gets the file path to rebased expected result directory for workers. // webkit/data/layout_tests/platform/chromium_***/LayoutTests/.../workers rebase_result_dir_ = src_dir.AppendASCII("webkit"); @@ -110,6 +115,7 @@ void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { rebase_result_dir_ = rebase_result_dir_.AppendASCII("layout_tests"); rebase_result_dir_ = rebase_result_dir_.AppendASCII("platform"); rebase_result_dir_ = rebase_result_dir_.AppendASCII(kPlatformName); + rebase_result_dir_ = rebase_result_dir_.Append(test_parent_dir); rebase_result_dir_ = rebase_result_dir_.Append(test_case_dir); // Creates the temporary directory. @@ -121,6 +127,11 @@ void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { // like .../LayoutTests/fast/workers/.... Otherwise those layout tests // dealing with location property, like worker-location.html, could fail. new_layout_test_dir_ = temp_test_dir_; + new_layout_test_dir_ = new_layout_test_dir_.Append(test_parent_dir); + if (is_http_test) { + new_http_root_dir_ = new_layout_test_dir_; + test_case_dir_ = test_case_dir; + } new_layout_test_dir_ = new_layout_test_dir_.Append(test_case_dir); ASSERT_TRUE(file_util::CreateDirectory(new_layout_test_dir_)); @@ -131,10 +142,21 @@ void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { FilePath new_layout_test_resource_path(new_layout_test_dir_); new_layout_test_resource_path = new_layout_test_resource_path.AppendASCII("resources"); - ASSERT_TRUE(file_util::DirectoryExists(layout_test_resource_path)); ASSERT_TRUE(file_util::CopyDirectory( layout_test_resource_path, new_layout_test_resource_path, true)); + // Copies the parent resource subdirectory. This is needed in order to run + // http layout tests. + if (is_http_test) { + FilePath parent_resource_path(layout_test_dir_.DirName()); + parent_resource_path = parent_resource_path.AppendASCII("resources"); + FilePath new_parent_resource_path(new_layout_test_dir_.DirName()); + new_parent_resource_path = + new_parent_resource_path.AppendASCII("resources"); + ASSERT_TRUE(file_util::CopyDirectory( + parent_resource_path, new_parent_resource_path, true)); + } + // Reads the layout test controller simulation script. FilePath path; PathService::Get(chrome::DIR_TEST_DATA, &path); @@ -143,7 +165,8 @@ void WorkerTest::InitializeForLayoutTest(const FilePath& test_case_dir) { ASSERT_TRUE(file_util::ReadFileToString(path, &layout_test_controller_)); } -void WorkerTest::RunLayoutTest(const std::string& test_case_file_name) { +void WorkerTest::RunLayoutTest(const std::string& test_case_file_name, + bool is_http_test) { SCOPED_TRACE(test_case_file_name.c_str()); ASSERT_TRUE(!layout_test_controller_.empty()); @@ -171,13 +194,22 @@ void WorkerTest::RunLayoutTest(const std::string& test_case_file_name) { ASSERT_TRUE(file_util::WriteFile(new_test_file_path, &test_html.at(0), static_cast<int>(test_html.size()))); - GURL new_test_file_url = net::FilePathToFileURL(new_test_file_path); + + scoped_ptr<GURL> new_test_url; + if (is_http_test) + new_test_url.reset(new GURL( + std::string("http://localhost:8080/") + + UTF16ToUTF8(test_case_dir_.ToWStringHack()) + + "/" + + test_case_file_name)); + else + new_test_url.reset(new GURL(net::FilePathToFileURL(new_test_file_path))); // Runs the new layout test. scoped_refptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(new_test_file_url)); + ASSERT_TRUE(tab->NavigateToURL(*new_test_url.get())); std::string escaped_value = - WaitUntilCookieNonEmpty(tab.get(), new_test_file_url, + WaitUntilCookieNonEmpty(tab.get(), *new_test_url.get(), status_cookie.c_str(), kTestIntervalMs, kTestWaitTimeoutMs); // Unescapes and normalizes the actual result. @@ -246,11 +278,59 @@ TEST_F(WorkerTest, WorkerFastLayoutTests) { FilePath fast_test_dir; fast_test_dir = fast_test_dir.AppendASCII("LayoutTests"); fast_test_dir = fast_test_dir.AppendASCII("fast"); - fast_test_dir = fast_test_dir.AppendASCII("workers"); - InitializeForLayoutTest(fast_test_dir); + FilePath worker_test_dir; + worker_test_dir = worker_test_dir.AppendASCII("workers"); + InitializeForLayoutTest(fast_test_dir, worker_test_dir, false); + + for (int i = 0; i < arraysize(kLayoutTestFiles); ++i) + RunLayoutTest(kLayoutTestFiles[i], false); +} + +TEST_F(WorkerTest, WorkerHttpLayoutTests) { + static const char* kLayoutTestFiles[] = { + //"text-encoding.html", + "worker-importScripts.html", + "worker-redirect.html", + }; + + FilePath http_test_dir; + http_test_dir = http_test_dir.AppendASCII("LayoutTests"); + http_test_dir = http_test_dir.AppendASCII("http"); + http_test_dir = http_test_dir.AppendASCII("tests"); + + FilePath worker_test_dir; + worker_test_dir = worker_test_dir.AppendASCII("workers"); + InitializeForLayoutTest(http_test_dir, worker_test_dir, true); + + StartHttpServer(new_http_root_dir_); for (int i = 0; i < arraysize(kLayoutTestFiles); ++i) - RunLayoutTest(kLayoutTestFiles[i]); + RunLayoutTest(kLayoutTestFiles[i], true); + StopHttpServer(); +} + +TEST_F(WorkerTest, WorkerXhrHttpLayoutTests) { + static const char* kLayoutTestFiles[] = { + "abort-exception-assert.html", + //"methods-async.html", + //"methods.html", + "xmlhttprequest-file-not-found.html" + }; + + FilePath http_test_dir; + http_test_dir = http_test_dir.AppendASCII("LayoutTests"); + http_test_dir = http_test_dir.AppendASCII("http"); + http_test_dir = http_test_dir.AppendASCII("tests"); + + FilePath worker_test_dir; + worker_test_dir = worker_test_dir.AppendASCII("xmlhttprequest"); + worker_test_dir = worker_test_dir.AppendASCII("workers"); + InitializeForLayoutTest(http_test_dir, worker_test_dir, true); + + StartHttpServer(new_http_root_dir_); + for (int i = 0; i < arraysize(kLayoutTestFiles); ++i) + RunLayoutTest(kLayoutTestFiles[i], true); + StopHttpServer(); } TEST_F(WorkerTest, LimitPerPage) { @@ -290,12 +370,3 @@ TEST_F(WorkerTest, LimitTotal) { EXPECT_EQ(total_workers + 1 + (UITest::in_process_renderer() ? 0 : tab_count), UITest::GetBrowserProcessCount()); } - -TEST_F(WorkerTest, TestHttpServer) { - FilePath path; - PathService::Get(chrome::DIR_TEST_DATA, &path); - path = path.AppendASCII("workers"); - StartHttpServer(path); - RunHttpTest("test_http_server_up.html"); - StopHttpServer(); -} |