summaryrefslogtreecommitdiffstats
path: root/chrome/worker
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-05 06:02:07 +0000
committerjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-05 06:02:07 +0000
commit6d3744980e419303b01f12fe6c82ff81cfc2fd2f (patch)
tree3ad6ece5678bf4cf53fb04d232dfb779ccf4b89f /chrome/worker
parentaded0071867946f9aab08ce88ebbfd83c77c83af (diff)
downloadchromium_src-6d3744980e419303b01f12fe6c82ff81cfc2fd2f.zip
chromium_src-6d3744980e419303b01f12fe6c82ff81cfc2fd2f.tar.gz
chromium_src-6d3744980e419303b01f12fe6c82ff81cfc2fd2f.tar.bz2
Run the DOM Storage layout tests in the UI test framework since the test shell doesn't hit very much of the new code. I still plan to write unit tests and we're still goign to enable the layout tests in test shell, but this is still a good way for us to test the full stack ASAP.
Workers has used this technique for a while now. This CL factors out the layout test running code from the workers ui test and moves arounds directories a bit so not everything is in the "workers" directory. Doing this via a v8 extension is the right way to go long term, but I ran into a couple snags, so I think this is a good first step. TEST=none BUG=none Review URL: http://codereview.chromium.org/159720 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22466 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/worker')
-rw-r--r--chrome/worker/worker_uitest.cc289
1 files changed, 14 insertions, 275 deletions
diff --git a/chrome/worker/worker_uitest.cc b/chrome/worker/worker_uitest.cc
index 567306c..3421dbd 100644
--- a/chrome/worker/worker_uitest.cc
+++ b/chrome/worker/worker_uitest.cc
@@ -2,291 +2,30 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/path_service.h"
-#include "base/platform_thread.h"
-#include "base/string_util.h"
#include "chrome/browser/worker_host/worker_service.h"
-#include "chrome/common/chrome_paths.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
-#include "chrome/test/ui/ui_test.h"
-#include "net/base/escape.h"
-#include "net/base/net_util.h"
-
-#if defined(OS_WIN)
-const char kPlatformName[] = "chromium-win";
-#elif defined(OS_MACOSX)
-const char kPlatformName[] = "chromium-mac";
-#elif defined(OS_LINUX)
-const char kPlatformName[] = "chromium-linux";
-#else
-#error No known OS defined
-#endif
-
-const char kTestCompleteCookie[] = "status";
-const char kTestCompleteSuccess[] = "OK";
-const int kTestIntervalMs = 250;
-const int kTestWaitTimeoutMs = 60 * 1000;
-
-class WorkerTest : public UITest {
- protected:
- WorkerTest();
- virtual ~WorkerTest();
-
- void RunTest(const std::wstring& test_case);
+#include "chrome/test/ui/ui_layout_test.h"
- 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);
+static const char kTestCompleteCookie[] = "status";
+static const char kTestCompleteSuccess[] = "OK";
+class WorkerTest : public UILayoutTest {
protected:
- bool ReadExpectedResult(const FilePath& result_dir_path,
- const std::string test_case_file_name,
- std::string* expected_result_value);
-
- bool initialized_for_layout_test_;
- 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_;
- FilePath rebase_result_win_dir_;
- std::string layout_test_controller_;
-};
-
-WorkerTest::WorkerTest()
- : UITest(), initialized_for_layout_test_(false), test_count_(0) {
-}
-
-WorkerTest::~WorkerTest() {
- // The deletion might fail because HTTP server process might not been
- // completely shut down yet and is still holding certain handle to it.
- // To work around this problem, we try to repeat the deletion several
- // times.
- if (!temp_test_dir_.empty()) {
- static const int kRetryNum = 10;
- static const int kRetryDelayTimeMs = 500;
-
- int retry_time = 0;
- for (int i = 0; i < kRetryNum; ++i) {
- file_util::Delete(temp_test_dir_, true);
- if (!file_util::DirectoryExists(temp_test_dir_))
- break;
-
- PlatformThread::Sleep(kRetryDelayTimeMs);
- retry_time += kRetryDelayTimeMs;
- }
-
- if (retry_time)
- printf("Retrying %d ms to delete temp worker directory.\n", retry_time);
- }
-}
-
-void WorkerTest::RunTest(const std::wstring& test_case) {
- scoped_refptr<TabProxy> tab(GetActiveTab());
- ASSERT_TRUE(tab.get());
-
- GURL url = GetTestUrl(L"workers", test_case);
- ASSERT_TRUE(tab->NavigateToURL(url));
-
- std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
- kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
- ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
-}
+ virtual ~WorkerTest() { }
-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);
-
- // Gets the file path to WebKit layout tests for workers, that is,
- // chrome/test/data/workers/LayoutTests/.../workers
- // Note that we have to use our copy of WebKit layout tests for workers.
- // This is because our build machines do not have WebKit layout tests added.
- layout_test_dir_ = src_dir.AppendASCII("chrome");
- 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.
- // third_party/LayoutTests/.../workers
- if (!file_util::DirectoryExists(layout_test_dir_)) {
- layout_test_dir_ = src_dir.AppendASCII("third_party");
- 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_));
- }
+ void RunTest(const std::wstring& test_case) {
+ scoped_refptr<TabProxy> tab(GetActiveTab());
+ ASSERT_TRUE(tab.get());
- // Gets the file path to rebased expected result directory for workers for
- // current platform.
- // webkit/data/layout_tests/platform/chromium_***/LayoutTests/.../workers
- rebase_result_dir_ = src_dir.AppendASCII("webkit");
- rebase_result_dir_ = rebase_result_dir_.AppendASCII("data");
- 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);
-
- // Gets the file path to rebased expected result directory for workers under
- // win32 platform. This is used by other non-win32 platform to use the same
- // rebased expected results.
-#if !defined(OS_WIN)
- rebase_result_win_dir_ = src_dir.AppendASCII("webkit");
- rebase_result_win_dir_ = rebase_result_win_dir_.AppendASCII("data");
- rebase_result_win_dir_ = rebase_result_win_dir_.AppendASCII("layout_tests");
- rebase_result_win_dir_ = rebase_result_win_dir_.AppendASCII("platform");
- rebase_result_win_dir_ = rebase_result_win_dir_.AppendASCII("chromium-win");
- rebase_result_win_dir_ = rebase_result_win_dir_.Append(test_parent_dir);
- rebase_result_win_dir_ = rebase_result_win_dir_.Append(test_case_dir);
-#endif
-
- // Creates the temporary directory.
- ASSERT_TRUE(file_util::CreateNewTempDirectory(
- FILE_PATH_LITERAL("chrome_worker_test_"), &temp_test_dir_));
-
- // Creates the new layout test subdirectory under the temp directory.
- // Note that we have to mimic the same layout test directory structure,
- // 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_));
-
- // Copies the resource subdirectory.
- FilePath layout_test_resource_path(layout_test_dir_);
- layout_test_resource_path =
- layout_test_resource_path.AppendASCII("resources");
- 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::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));
- }
+ GURL url = GetTestUrl(L"workers", test_case);
+ ASSERT_TRUE(tab->NavigateToURL(url));
- // Reads the layout test controller simulation script.
- FilePath path;
- PathService::Get(chrome::DIR_TEST_DATA, &path);
- path = path.AppendASCII("workers");
- path = path.AppendASCII("layout_test_controller.html");
- ASSERT_TRUE(file_util::ReadFileToString(path, &layout_test_controller_));
-}
-
-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());
-
- // Creates a new cookie name. We will have to use a new cookie because
- // this function could be called multiple times.
- std::string status_cookie(kTestCompleteCookie);
- status_cookie += IntToString(test_count_);
- test_count_++;
-
- // Reads the layout test HTML file.
- FilePath test_file_path(layout_test_dir_);
- test_file_path = test_file_path.AppendASCII(test_case_file_name);
- std::string test_html;
- ASSERT_TRUE(file_util::ReadFileToString(test_file_path, &test_html));
-
- // Injects the layout test controller into the test HTML.
- test_html.insert(0, layout_test_controller_);
- ReplaceSubstringsAfterOffset(
- &test_html, 0, "%COOKIE%", status_cookie.c_str());
-
- // Creates the new layout test HTML file.
- FilePath new_test_file_path(new_layout_test_dir_);
- new_test_file_path = new_test_file_path.AppendASCII(test_case_file_name);
- ASSERT_TRUE(file_util::WriteFile(new_test_file_path,
- &test_html.at(0),
- static_cast<int>(test_html.size())));
-
- scoped_ptr<GURL> new_test_url;
- if (is_http_test)
- new_test_url.reset(new GURL(
- std::string("http://localhost:8080/") +
- WideToUTF8(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.get());
- ASSERT_TRUE(tab->NavigateToURL(*new_test_url.get()));
- std::string escaped_value =
- WaitUntilCookieNonEmpty(tab.get(), *new_test_url.get(),
- status_cookie.c_str(), kTestIntervalMs, kTestWaitTimeoutMs);
-
- // Unescapes and normalizes the actual result.
- std::string value = UnescapeURLComponent(escaped_value,
- UnescapeRule::NORMAL | UnescapeRule::SPACES |
- UnescapeRule::URL_SPECIAL_CHARS | UnescapeRule::CONTROL_CHARS);
- value += "\n";
- ReplaceSubstringsAfterOffset(&value, 0, "\r", "");
-
- // Reads the expected result. First try to read from rebase directory.
- // If failed, read from original directory.
- std::string expected_result_value;
- if (!ReadExpectedResult(rebase_result_dir_,
- test_case_file_name,
- &expected_result_value)) {
- if (rebase_result_win_dir_.empty() ||
- !ReadExpectedResult(rebase_result_win_dir_,
- test_case_file_name,
- &expected_result_value))
- ReadExpectedResult(layout_test_dir_,
- test_case_file_name,
- &expected_result_value);
+ std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
+ kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
+ ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
}
- ASSERT_TRUE(!expected_result_value.empty());
-
- // Normalizes the expected result.
- ReplaceSubstringsAfterOffset(&expected_result_value, 0, "\r", "");
-
- // Compares the results.
- EXPECT_STREQ(expected_result_value.c_str(), value.c_str());
-}
-
-bool WorkerTest::ReadExpectedResult(const FilePath& result_dir_path,
- const std::string test_case_file_name,
- std::string* expected_result_value) {
- FilePath expected_result_path(result_dir_path);
- expected_result_path = expected_result_path.AppendASCII(test_case_file_name);
- expected_result_path = expected_result_path.InsertBeforeExtension(
- FILE_PATH_LITERAL("-expected"));
- expected_result_path =
- expected_result_path.ReplaceExtension(FILE_PATH_LITERAL("txt"));
- return file_util::ReadFileToString(expected_result_path,
- expected_result_value);
-}
+};
TEST_F(WorkerTest, DISABLED_SingleWorker) {
RunTest(L"single_worker.html");