diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-10 16:43:27 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-10 16:43:27 +0000 |
commit | 42a116127704f97231765ff599cc1267747e2a70 (patch) | |
tree | 13f05cd5a09b75a2dd7649f12ddd0399b837beb4 | |
parent | 02528ba2437c46f8ced345431f8ee9ec25625577 (diff) | |
download | chromium_src-42a116127704f97231765ff599cc1267747e2a70.zip chromium_src-42a116127704f97231765ff599cc1267747e2a70.tar.gz chromium_src-42a116127704f97231765ff599cc1267747e2a70.tar.bz2 |
This CL makes a more generic browser test launcher and a DLL of the
interactive UI tests, so the interactive UI tests can be run isolated.
BUG=None
TEST=Run the the interactive ui tests with the new launcher:
test_launcher --lib=interactive_ui_tests_dll
Review URL: http://codereview.chromium.org/197045
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25863 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/chrome.gyp | 167 | ||||
-rw-r--r-- | chrome/test/test_launcher/in_proc_test_runner.cc (renamed from chrome/test/browser/browser_test_launcher_in_proc.cc) | 57 | ||||
-rw-r--r-- | chrome/test/test_launcher/out_of_proc_test_runner.cc (renamed from chrome/test/browser/browser_test_launcher_out_of_proc.cc) | 28 | ||||
-rw-r--r-- | chrome/test/test_launcher/run_all_unittests.cc (renamed from chrome/test/browser/run_all_unittests.cc) | 0 | ||||
-rw-r--r-- | chrome/test/test_launcher/test_runner.cc (renamed from chrome/test/browser/browser_test_runner.cc) | 19 | ||||
-rw-r--r-- | chrome/test/test_launcher/test_runner.h (renamed from chrome/test/browser/browser_test_runner.h) | 31 |
6 files changed, 230 insertions, 72 deletions
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 240c40a..f60d757 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -5327,10 +5327,10 @@ ], 'defines': [ 'ALLOW_IN_PROC_BROWSER_TEST' ], 'sources': [ - 'test/browser/run_all_unittests.cc', - 'test/browser/browser_test_launcher_out_of_proc.cc', - 'test/browser/browser_test_runner.cc', - 'test/browser/browser_test_runner.h', + 'test/test_launcher/out_of_proc_test_runner.cc', + 'test/test_launcher/test_runner.cc', + 'test/test_launcher/test_runner.h', + 'test/test_launcher/run_all_unittests.cc', 'test/unit/chrome_test_suite.h', # browser_tests_sources is defined in 'variables' at the top of the # file. @@ -5539,7 +5539,7 @@ 'test/live_sync/live_bookmarks_sync_test.h', 'test/live_sync/profile_sync_service_test_harness.cc', 'test/live_sync/profile_sync_service_test_harness.h', - 'test/browser/run_all_unittests.cc', + 'test/test_launcher/run_all_unittests.cc', 'test/test_notification_tracker.cc', 'test/test_notification_tracker.h', 'test/testing_browser_process.h', @@ -5596,6 +5596,138 @@ ], }, { + 'target_name': 'interactive_ui_tests_dll', + # 'product_name': 'interactive_ui_tests', + 'type': 'shared_library', + 'msvs_guid': '04116FAF-DA17-46EE-B108-971FCF0F0AFC', + 'dependencies': [ + 'chrome', + 'chrome_resources', + 'chrome_strings', + 'debugger', + 'test_support_common', + 'test_support_ui', + 'syncapi', + '../third_party/hunspell/hunspell.gyp:hunspell', + '../net/net.gyp:net_resources', + '../skia/skia.gyp:skia', + '../third_party/icu/icu.gyp:icui18n', + '../third_party/libpng/libpng.gyp:libpng', + '../third_party/libxml/libxml.gyp:libxml', + '../third_party/zlib/zlib.gyp:zlib', + '../testing/gtest.gyp:gtest', + '../third_party/npapi/npapi.gyp:npapi', + # run time dependency + '../webkit/webkit.gyp:webkit_resources', + ], + 'include_dirs': [ + '..', + ], + 'defines': [ 'ALLOW_IN_PROC_BROWSER_TEST' ], + 'sources': [ + 'browser/browser_focus_uitest.cc', + 'browser/debugger/devtools_sanity_unittest.cc', + 'browser/views/bookmark_bar_view_test.cc', + 'browser/blocked_popup_container_interactive_uitest.cc', + 'browser/views/find_bar_win_interactive_uitest.cc', + 'browser/views/tabs/tab_dragging_test.cc', + 'test/in_process_browser_test.cc', + 'test/in_process_browser_test.h', + 'test/interactive_ui/npapi_interactive_test.cc', + 'test/interactive_ui/view_event_test_base.cc', + 'test/interactive_ui/view_event_test_base.h', + 'test/test_launcher/run_all_unittests.cc', + 'test/test_launcher/test_runner.h', + 'test/test_launcher/test_runner.cc', + 'test/unit/chrome_test_suite.h', + ], + 'conditions': [ + ['OS=="linux"', { + 'dependencies': [ + '../build/linux/system.gyp:gtk', + ], + 'sources!': [ + # TODO(port) + 'browser/views/bookmark_bar_view_test.cc', + 'browser/views/find_bar_win_interactive_uitest.cc', + 'browser/views/tabs/tab_dragging_test.cc', + 'test/interactive_ui/npapi_interactive_test.cc', + 'test/interactive_ui/view_event_test_base.cc', + 'test/interactive_ui/view_event_test_base.h', + ], + }], + ['target_arch!="x64"', { + 'dependencies': [ + # run time dependency + '../webkit/tools/test_shell/test_shell.gyp:npapi_test_plugin', + ], + }], + ['OS=="linux" and toolkit_views==1', { + 'dependencies': [ + '../views/views.gyp:views', + ], + }], + ['OS=="mac"', { + 'sources!': [ + # TODO(port) + 'browser/browser_focus_uitest.cc', + 'browser/debugger/devtools_sanity_unittest.cc', + 'browser/views/bookmark_bar_view_test.cc', + 'browser/blocked_popup_container_interactive_uitest.cc', + 'browser/views/find_bar_win_interactive_uitest.cc', + 'browser/views/tabs/tab_dragging_test.cc', + 'test/interactive_ui/npapi_interactive_test.cc', + 'test/interactive_ui/view_event_test_base.cc', + 'test/interactive_ui/view_event_test_base.h', + ], + }], + ['OS=="win"', { + 'include_dirs': [ + 'third_party/wtl/include', + ], + 'dependencies': [ + 'chrome_dll_version', + 'crash_service', # run time dependency + 'installer/installer.gyp:installer_util_strings', + '../views/views.gyp:views', + ], + 'sources': [ + '../webkit/glue/resources/aliasb.cur', + '../webkit/glue/resources/cell.cur', + '../webkit/glue/resources/col_resize.cur', + '../webkit/glue/resources/copy.cur', + '../webkit/glue/resources/row_resize.cur', + '../webkit/glue/resources/vertical_text.cur', + '../webkit/glue/resources/zoom_in.cur', + '../webkit/glue/resources/zoom_out.cur', + + 'app/chrome_dll.rc', + 'test/data/resource.rc', + + # TODO: It would be nice to have these pulled in + # automatically from direct_dependent_settings in + # their various targets (net.gyp:net_resources, etc.), + # but that causes errors in other targets when + # resulting .res files get referenced multiple times. + '<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/net/net_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_resources.rc', + ], + 'configurations': { + 'Debug': { + 'msvs_settings': { + 'VCLinkerTool': { + 'LinkIncremental': '<(msvs_large_module_debug_link_mode)', + }, + }, + }, + }, + }], + ], + }, + { # Shared library used by the in-proc browser tests. 'target_name': 'browser_tests_dll', 'type': 'shared_library', @@ -5631,9 +5763,9 @@ }, 'defines': [ 'ALLOW_IN_PROC_BROWSER_TEST' ], 'sources': [ - 'test/browser/run_all_unittests.cc', 'test/in_process_browser_test.cc', 'test/in_process_browser_test.h', + 'test/test_launcher/run_all_unittests.cc', 'test/unit/chrome_test_suite.h', 'test/ui_test_utils.cc', 'app/chrome_dll.rc', @@ -5668,9 +5800,9 @@ '..', ], 'sources': [ - 'test/browser/browser_test_launcher_in_proc.cc', - 'test/browser/browser_test_runner.cc', - 'test/browser/browser_test_runner.h', + 'test/test_launcher/in_proc_test_runner.cc', + 'test/test_launcher/test_runner.cc', + 'test/test_launcher/test_runner.h', ], 'msvs_settings': { 'VCLinkerTool': { @@ -5680,6 +5812,23 @@ }, }, { + # Executable that runs the tests in-process (tests are bundled in a DLL). + 'target_name': 'test_launcher', + 'type': 'executable', + 'msvs_guid': 'FA94F5AA-BC73-4926-A189-71FAA986C905', + 'dependencies': [ + '../base/base.gyp:base', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'test/test_launcher/in_proc_test_runner.cc', + 'test/test_launcher/test_runner.cc', + 'test/test_launcher/test_runner.h', + ], + }, + { 'target_name': 'crash_service', 'type': 'executable', 'msvs_guid': '89C1C190-A5D1-4EC4-BD6A-67FF2195C7CC', diff --git a/chrome/test/browser/browser_test_launcher_in_proc.cc b/chrome/test/test_launcher/in_proc_test_runner.cc index bff4ca4..379d4e5 100644 --- a/chrome/test/browser/browser_test_launcher_in_proc.cc +++ b/chrome/test/test_launcher/in_proc_test_runner.cc @@ -14,36 +14,37 @@ #include "base/process_util.h" #include "base/string_util.h" -#include "chrome/test/browser/browser_test_runner.h" +#include "chrome/test/test_launcher/test_runner.h" -// This version of the browser test launcher loads a dynamic library containing -// the tests and executes the them in that library. When the test has been run -// the library is unloaded, to ensure atexit handlers are run and static +// This version of the test launcher loads a dynamic library containing the +// tests and executes the them in that library. When the test has been run the +// library is unloaded, to ensure atexit handlers are run and static // initializers will be run again for the next test. namespace { -const wchar_t* const kBrowserTesLibBaseName = L"browser_tests"; +const wchar_t* const kLibNameFlag = L"lib"; const wchar_t* const kGTestListTestsFlag = L"gtest_list_tests"; -class InProcBrowserTestRunner : public browser_tests::BrowserTestRunner { +class InProcTestRunner : public tests::TestRunner { public: - InProcBrowserTestRunner() : dynamic_lib_(NULL), run_test_proc_(NULL) { + explicit InProcTestRunner(const std::wstring& lib_name) + : lib_name_(lib_name), + dynamic_lib_(NULL), + run_test_proc_(NULL) { } - ~InProcBrowserTestRunner() { + ~InProcTestRunner() { if (!dynamic_lib_) return; base::UnloadNativeLibrary(dynamic_lib_); - LOG(INFO) << "Unloaded " << - base::GetNativeLibraryName(kBrowserTesLibBaseName); + LOG(INFO) << "Unloaded " << base::GetNativeLibraryName(lib_name_); } bool Init() { FilePath lib_path; CHECK(PathService::Get(base::FILE_EXE, &lib_path)); - lib_path = lib_path.DirName().Append( - base::GetNativeLibraryName(kBrowserTesLibBaseName)); + lib_path = lib_path.DirName().Append(base::GetNativeLibraryName(lib_name_)); LOG(INFO) << "Loading '" << lib_path.value() << "'"; @@ -72,7 +73,7 @@ class InProcBrowserTestRunner : public browser_tests::BrowserTestRunner { argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>(filter_flag.c_str()); // Always enable disabled tests. This method is not called with disabled - // tests unless this flag was specified to the browser test executable. + // tests unless this flag was specified to the test launcher. argv[2] = "--gtest_also_run_disabled_tests"; return RunAsIs(3, argv) == 0; } @@ -85,23 +86,27 @@ class InProcBrowserTestRunner : public browser_tests::BrowserTestRunner { private: typedef int (CDECL *RunTestProc)(int, char**); + std::wstring lib_name_; base::NativeLibrary dynamic_lib_; RunTestProc run_test_proc_; - DISALLOW_COPY_AND_ASSIGN(InProcBrowserTestRunner); + DISALLOW_COPY_AND_ASSIGN(InProcTestRunner); }; -class InProcBrowserTestRunnerFactory - : public browser_tests::BrowserTestRunnerFactory { +class InProcTestRunnerFactory : public tests::TestRunnerFactory { public: - InProcBrowserTestRunnerFactory() { } + explicit InProcTestRunnerFactory(const std::wstring& lib_name) + : lib_name_(lib_name) { + } - virtual browser_tests::BrowserTestRunner* CreateBrowserTestRunner() const { - return new InProcBrowserTestRunner(); + virtual tests::TestRunner* CreateTestRunner() const { + return new InProcTestRunner(lib_name_); } private: - DISALLOW_COPY_AND_ASSIGN(InProcBrowserTestRunnerFactory); + std::wstring lib_name_; + + DISALLOW_COPY_AND_ASSIGN(InProcTestRunnerFactory); }; } // namespace @@ -111,14 +116,20 @@ int main(int argc, char** argv) { CommandLine::Init(argc, argv); const CommandLine* command_line = CommandLine::ForCurrentProcess(); + std::wstring lib_name = command_line->GetSwitchValue(kLibNameFlag); + if (lib_name.empty()) { + LOG(ERROR) << "No dynamic library name specified. You must specify one with" + " the --lib=<lib_name> option."; + return 1; + } if (command_line->HasSwitch(kGTestListTestsFlag)) { - InProcBrowserTestRunner test_runner; + InProcTestRunner test_runner(lib_name); if (!test_runner.Init()) return 1; return test_runner.RunAsIs(argc, argv); } - InProcBrowserTestRunnerFactory test_runner_factory; - return browser_tests::RunTests(test_runner_factory) ? 0 : 1; + InProcTestRunnerFactory test_runner_factory(lib_name); + return tests::RunTests(test_runner_factory) ? 0 : 1; } diff --git a/chrome/test/browser/browser_test_launcher_out_of_proc.cc b/chrome/test/test_launcher/out_of_proc_test_runner.cc index 61f0cd7..3d02bcb 100644 --- a/chrome/test/browser/browser_test_launcher_out_of_proc.cc +++ b/chrome/test/test_launcher/out_of_proc_test_runner.cc @@ -8,23 +8,22 @@ #include "base/logging.h" #include "base/process_util.h" -#include "chrome/test/browser/browser_test_runner.h" +#include "chrome/test/test_launcher/test_runner.h" #include "chrome/test/unit/chrome_test_suite.h" -// This version of the browser test launcher forks a new process for each test -// it runs. +// This version of the test launcher forks a new process for each test it runs. namespace { const wchar_t* const kGTestListTestsFlag = L"gtest_list_tests"; const wchar_t* const kChildProcessFlag = L"child"; -class OutOfProcBrowserTestRunner : public browser_tests::BrowserTestRunner { +class OutOfProcTestRunner : public tests::TestRunner { public: - OutOfProcBrowserTestRunner() { + OutOfProcTestRunner() { } - virtual ~OutOfProcBrowserTestRunner() { + virtual ~OutOfProcTestRunner() { } bool Init() { @@ -55,20 +54,19 @@ class OutOfProcBrowserTestRunner : public browser_tests::BrowserTestRunner { } private: - DISALLOW_COPY_AND_ASSIGN(OutOfProcBrowserTestRunner); + DISALLOW_COPY_AND_ASSIGN(OutOfProcTestRunner); }; -class OutOfProcBrowserTestRunnerFactory - : public browser_tests::BrowserTestRunnerFactory { +class OutOfProcTestRunnerFactory : public tests::TestRunnerFactory { public: - OutOfProcBrowserTestRunnerFactory() { } + OutOfProcTestRunnerFactory() { } - virtual browser_tests::BrowserTestRunner* CreateBrowserTestRunner() const { - return new OutOfProcBrowserTestRunner(); + virtual tests::TestRunner* CreateTestRunner() const { + return new OutOfProcTestRunner(); } private: - DISALLOW_COPY_AND_ASSIGN(OutOfProcBrowserTestRunnerFactory); + DISALLOW_COPY_AND_ASSIGN(OutOfProcTestRunnerFactory); }; } // namespace @@ -83,6 +81,6 @@ int main(int argc, char** argv) { if (command_line->HasSwitch(kGTestListTestsFlag)) return ChromeTestSuite(argc, argv).Run(); - OutOfProcBrowserTestRunnerFactory test_runner_factory; - return browser_tests::RunTests(test_runner_factory) ? 0 : 1; + OutOfProcTestRunnerFactory test_runner_factory; + return tests::RunTests(test_runner_factory) ? 0 : 1; } diff --git a/chrome/test/browser/run_all_unittests.cc b/chrome/test/test_launcher/run_all_unittests.cc index e4eb431..e4eb431 100644 --- a/chrome/test/browser/run_all_unittests.cc +++ b/chrome/test/test_launcher/run_all_unittests.cc diff --git a/chrome/test/browser/browser_test_runner.cc b/chrome/test/test_launcher/test_runner.cc index bd0e2fe..4fb34cd 100644 --- a/chrome/test/browser/browser_test_runner.cc +++ b/chrome/test/test_launcher/test_runner.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/test/browser/browser_test_runner.h" +#include "chrome/test/test_launcher/test_runner.h" #include <vector> @@ -23,9 +23,9 @@ const wchar_t* const kGTestRunDisabledTestsFlag = // |command_line| should contain the command line used to start the browser // test launcher, it is expected that it does not contain the // --gtest_list_tests flag already. -// Note: we cannot implement this in-process for InProcessBrowserTestRunner as -// GTest prints to the stdout and there are no good way of temporarily -// redirecting outputs. +// Note: we cannot implement this in-process for InProcessTestRunner as GTest +// prints to the stdout and there are no good way of temporarily redirecting +// outputs. bool GetTestList(const CommandLine& command_line, std::vector<std::string>* test_list) { DCHECK(!command_line.HasSwitch(kGTestListTestsFlag)); @@ -72,15 +72,15 @@ bool GetTestList(const CommandLine& command_line, } // namespace -namespace browser_tests { +namespace tests { -BrowserTestRunner::BrowserTestRunner() { +TestRunner::TestRunner() { } -BrowserTestRunner::~BrowserTestRunner() { +TestRunner::~TestRunner() { } -bool RunTests(const BrowserTestRunnerFactory& browser_test_runner_factory) { +bool RunTests(const TestRunnerFactory& test_runner_factory) { const CommandLine* command_line = CommandLine::ForCurrentProcess(); DCHECK(!command_line->HasSwitch(kGTestListTestsFlag)); @@ -102,8 +102,7 @@ bool RunTests(const BrowserTestRunnerFactory& browser_test_runner_factory) { for (std::vector<std::string>::const_iterator iter = test_list.begin(); iter != test_list.end(); ++iter) { std::string test_name = *iter; - scoped_ptr<BrowserTestRunner> test_runner( - browser_test_runner_factory.CreateBrowserTestRunner()); + scoped_ptr<TestRunner> test_runner(test_runner_factory.CreateTestRunner()); if (!test_runner.get() || !test_runner->Init()) return false; test_run_count++; diff --git a/chrome/test/browser/browser_test_runner.h b/chrome/test/test_launcher/test_runner.h index cbc0ddf..6700dde 100644 --- a/chrome/test/browser/browser_test_runner.h +++ b/chrome/test/test_launcher/test_runner.h @@ -2,34 +2,35 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_TEST_BROWSER_BROWSER_TEST_RUNNER_ -#define CHROME_TEST_BROWSER_BROWSER_TEST_RUNNER_ +#ifndef CHROME_TEST_TEST_LAUNCHER_TEST_RUNNER_ +#define CHROME_TEST_TEST_LAUNCHER_TEST_RUNNER_ #include <string> #include <vector> #include "base/basictypes.h" -namespace browser_tests { +namespace tests { -class BrowserTestRunnerFactory; +class TestRunnerFactory; // Runs the tests specified by the --gtest_filter flag specified in the command // line that started this process. // Returns true if all tests succeeded, false if there were no tests to run, or // one or more tests failed, or if initialization failed. // Results are printed to stdout. -bool RunTests(const BrowserTestRunnerFactory& browser_test_runner_factory); +bool RunTests(const TestRunnerFactory& test_runner_factory); -// This class defines a way to run browser tests. +// This class defines a way to run tests in an isolated environment (each test +// having its static variables uninitialized). // There are 2 implementations, in-process and out-of-process. -class BrowserTestRunner { +class TestRunner { public: - BrowserTestRunner(); - virtual ~BrowserTestRunner(); + TestRunner(); + virtual ~TestRunner(); - // Called once before the BrowserTestRunner is used. Gives it an opportunity - // to perform any requried initialization. Should return true if the + // Called once before the TestRunner is used. Gives it an opportunity to + // perform any requried initialization. Should return true if the // initialization was successful. virtual bool Init() = 0; @@ -38,14 +39,14 @@ class BrowserTestRunner { virtual bool RunTest(const std::string& test_name) = 0; private: - DISALLOW_COPY_AND_ASSIGN(BrowserTestRunner); + DISALLOW_COPY_AND_ASSIGN(TestRunner); }; -class BrowserTestRunnerFactory { +class TestRunnerFactory { public: - virtual BrowserTestRunner* CreateBrowserTestRunner() const = 0; + virtual TestRunner* CreateTestRunner() const = 0; }; } // namespace -#endif // CHROME_TEST_BROWSER_BROWSER_TEST_RUNNER_ +#endif // CHROME_TEST_TEST_LAUNCHER_TEST_RUNNER_ |