diff options
author | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 06:02:07 +0000 |
---|---|---|
committer | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 06:02:07 +0000 |
commit | 6d3744980e419303b01f12fe6c82ff81cfc2fd2f (patch) | |
tree | 3ad6ece5678bf4cf53fb04d232dfb779ccf4b89f /chrome/worker | |
parent | aded0071867946f9aab08ce88ebbfd83c77c83af (diff) | |
download | chromium_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.cc | 289 |
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"); |