diff options
author | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-30 21:37:16 +0000 |
---|---|---|
committer | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-30 21:37:16 +0000 |
commit | c3fea5f8118111c0263ea7a6404e64da121194d3 (patch) | |
tree | 59677ccac6c52f87b14cac72cc1c5e2d77ef5bd4 | |
parent | 99d364a272e478b323e08798b68811185f7cb965 (diff) | |
download | chromium_src-c3fea5f8118111c0263ea7a6404e64da121194d3.zip chromium_src-c3fea5f8118111c0263ea7a6404e64da121194d3.tar.gz chromium_src-c3fea5f8118111c0263ea7a6404e64da121194d3.tar.bz2 |
Provide one to one correspondence between WebUI tests on C++ and JS ends.
R=arv@chromium.org,estade@chromium.org,scr@chromium.org
Review URL: http://codereview.chromium.org/6725034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79899 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/webui/settings_browsertest.cc | 10 | ||||
-rw-r--r-- | chrome/test/data/webui/sample_downloads.js | 16 | ||||
-rw-r--r-- | chrome/test/data/webui/settings_set_boolean_pref_triggers.js | 4 | ||||
-rw-r--r-- | chrome/test/data/webui/test_api.js | 28 | ||||
-rw-r--r-- | content/browser/webui/web_ui_browsertest.cc | 35 | ||||
-rw-r--r-- | content/browser/webui/web_ui_browsertest.h | 22 | ||||
-rw-r--r-- | content/browser/webui/web_ui_handler_browsertest.cc | 9 | ||||
-rw-r--r-- | content/browser/webui/web_ui_handler_browsertest.h | 4 |
8 files changed, 70 insertions, 58 deletions
diff --git a/chrome/browser/ui/webui/settings_browsertest.cc b/chrome/browser/ui/webui/settings_browsertest.cc index 1cc736d..a172d0f 100644 --- a/chrome/browser/ui/webui/settings_browsertest.cc +++ b/chrome/browser/ui/webui/settings_browsertest.cc @@ -66,6 +66,12 @@ class MockCoreOptionsHandler : public CoreOptionsHandler { class SettingsWebUITest : public WebUIBrowserTest { protected: + virtual void SetUpInProcessBrowserTestFixture() { + WebUIBrowserTest::SetUpInProcessBrowserTestFixture(); + // TODO(dtseng): change the filename of the js file. + AddLibrary(FILE_PATH_LITERAL("settings_set_boolean_pref_triggers.js")); + } + virtual WebUIMessageHandler* GetMockMessageHandler() { return &mock_core_options_handler_; } @@ -92,7 +98,5 @@ IN_PROC_BROWSER_TEST_F(SettingsWebUITest, MAYBE_TestSetBooleanPrefTriggers) { ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL)); EXPECT_CALL(mock_core_options_handler_, HandleSetBooleanPref(Eq_ListValue(&true_list_value))); - ASSERT_TRUE(RunWebUITest( - FILE_PATH_LITERAL("settings_set_boolean_pref_triggers.js"))); + ASSERT_TRUE(RunJavascriptTest("testSetBooleanPrefTriggers")); } - diff --git a/chrome/test/data/webui/sample_downloads.js b/chrome/test/data/webui/sample_downloads.js index 05abb94..bb1dfe7 100644 --- a/chrome/test/data/webui/sample_downloads.js +++ b/chrome/test/data/webui/sample_downloads.js @@ -4,14 +4,10 @@ // Sample tests that exercise the test JS library and show how this framework // could be used to test the downloads page. -// Call this method to run the tests. -// The method takes an array of functions (your tests). -runTests([ - function testAssertFalse() { - assertFalse(false); - }, +function testAssertFalse() { + assertFalse(false); +} - function testInitialFocus() { - assertTrue(document.activeElement.id == 'term', ''); - } -]); +function testInitialFocus() { + assertTrue(document.activeElement.id == 'term', ''); +} diff --git a/chrome/test/data/webui/settings_set_boolean_pref_triggers.js b/chrome/test/data/webui/settings_set_boolean_pref_triggers.js index c3d1d6d..2a90330 100644 --- a/chrome/test/data/webui/settings_set_boolean_pref_triggers.js +++ b/chrome/test/data/webui/settings_set_boolean_pref_triggers.js @@ -2,12 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -runTests([ -function() { +function testSetBooleanPrefTriggers() { // TODO(dtseng): make generic to click all buttons. var showHomeButton = $('toolbarShowHomeButton'); assertTrue(showHomeButton != null); showHomeButton.click(); showHomeButton.blur(); } -]); diff --git a/chrome/test/data/webui/test_api.js b/chrome/test/data/webui/test_api.js index 541ee01..ef5c0e1 100644 --- a/chrome/test/data/webui/test_api.js +++ b/chrome/test/data/webui/test_api.js @@ -54,25 +54,19 @@ throw new Error(message); } - // Call this method within your test script file to begin tests. - // Takes an array of functions; each function is a test. - function runTests(tests) { - var currentTest = tests.shift(); + function runTest(currentTest) { + try { + console.log('Running test ' + currentTest.name); + currentTest.call(); + } catch (e) { + console.error( + 'Failed: ' + currentTest.name + '\nwith exception: ' + e.message); - while (currentTest) { - try { - console.log('Running test ' + currentTest.name); - currentTest.call(); - currentTest = tests.shift(); - } catch (e) { - console.log( - 'Failed: ' + currentTest.name + '\nwith exception: ' + e.message); - - fail(e.message); - return; - } + fail(e.message); + return; } + // All tests passed. pass(''); } @@ -82,5 +76,5 @@ window.assertFalse = assertFalse; window.assertEquals = assertEquals; window.assertNotReached = assertNotReached; - window.runTests = runTests; + window.runTest = runTest; })(); diff --git a/content/browser/webui/web_ui_browsertest.cc b/content/browser/webui/web_ui_browsertest.cc index bf5469f..0fca0e2 100644 --- a/content/browser/webui/web_ui_browsertest.cc +++ b/content/browser/webui/web_ui_browsertest.cc @@ -18,11 +18,12 @@ static const FilePath::CharType* kWebUITestFolder = FILE_PATH_LITERAL("webui"); WebUIBrowserTest::~WebUIBrowserTest() {} -bool WebUIBrowserTest::RunWebUITest(const FilePath::CharType* src_path) { - std::string content; - BuildJavaScriptTest(FilePath(src_path), &content); - SetupHandlers(); - return test_handler_->Execute(content); +bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) { + return RunJavascriptUsingHandler(function_name, false); +} + +bool WebUIBrowserTest::RunJavascriptTest(const std::string& test_name) { + return RunJavascriptUsingHandler(test_name, true); } WebUIBrowserTest::WebUIBrowserTest() @@ -44,8 +45,7 @@ WebUIMessageHandler* WebUIBrowserTest::GetMockMessageHandler() { return NULL; } -void WebUIBrowserTest::BuildJavaScriptTest(const FilePath& src_path, - std::string* content) { +void WebUIBrowserTest::BuildJavascriptLibraries(std::string* content) { ASSERT_TRUE(content != NULL); std::string library_content, src_content; @@ -59,12 +59,20 @@ void WebUIBrowserTest::BuildJavaScriptTest(const FilePath& src_path, content->append(library_content); content->append(";\n"); } +} - ASSERT_TRUE(file_util::ReadFileToString( - test_data_directory_.Append(src_path), &src_content)); +bool WebUIBrowserTest::RunJavascriptUsingHandler( + const std::string& function_name, bool is_test) { + std::string content; + BuildJavascriptLibraries(&content); - content->append(";\n"); - content->append(src_content); + if (!function_name.empty()) { + std::string called_function = is_test ? "runTest(" + function_name + ");" : + function_name + "()"; + content.append(called_function); + } + SetupHandlers(); + return test_handler_->RunJavascript(content, is_test); } void WebUIBrowserTest::SetupHandlers() { @@ -83,9 +91,12 @@ void WebUIBrowserTest::AddLibrary(const FilePath::CharType* library_path) { } IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, TestSamplePass) { + AddLibrary(FILE_PATH_LITERAL("sample_downloads.js")); + // Navigate to UI. // TODO(dtseng): make accessor for subclasses to return? ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); - ASSERT_TRUE(RunWebUITest(FILE_PATH_LITERAL("sample_downloads.js"))); + ASSERT_TRUE(RunJavascriptTest("testAssertFalse")); + ASSERT_TRUE(RunJavascriptTest("testInitialFocus")); } diff --git a/content/browser/webui/web_ui_browsertest.h b/content/browser/webui/web_ui_browsertest.h index 2481177..dffc993 100644 --- a/content/browser/webui/web_ui_browsertest.h +++ b/content/browser/webui/web_ui_browsertest.h @@ -27,7 +27,12 @@ class WebUIBrowserTest : public InProcessBrowserTest { // Add a custom helper JS library for your test. void AddLibrary(const FilePath::CharType* library_path); - bool RunWebUITest(const FilePath::CharType* src_path); + // Runs a javascript function in the context of all libraries. + // Note that calls to functions in test_api.js are not supported. + bool RunJavascriptFunction(const std::string& function_name); + + // Runs a test that may include calls to functions in test_api.js. + bool RunJavascriptTest(const std::string& test_name); protected: WebUIBrowserTest(); @@ -39,14 +44,13 @@ class WebUIBrowserTest : public InProcessBrowserTest { virtual WebUIMessageHandler* GetMockMessageHandler(); private: - // Builds a javascript test in the form: - // <js_library> ... - // <src_path> ... - // runTests(function test1() {...}, - // ... - // ); - void BuildJavaScriptTest(const FilePath& src_path, - std::string* content); + // Builds a string containing all added javascript libraries. + void BuildJavascriptLibraries(std::string* content); + + // Calls the specified function with all libraries available. If |is_test| + // is true, the framework listens for pass fail messages from javascript. + bool RunJavascriptUsingHandler(const std::string& function_name, + bool is_test); // Attaches mock and test handlers. void SetupHandlers(); diff --git a/content/browser/webui/web_ui_handler_browsertest.cc b/content/browser/webui/web_ui_handler_browsertest.cc index 698daad..d7336c5 100644 --- a/content/browser/webui/web_ui_handler_browsertest.cc +++ b/content/browser/webui/web_ui_handler_browsertest.cc @@ -9,10 +9,15 @@ #include "chrome/test/ui_test_utils.h" #include "content/browser/renderer_host/render_view_host.h" -bool WebUIHandlerBrowserTest::Execute(const std::string& js_test) { +bool WebUIHandlerBrowserTest::RunJavascript(const std::string& js_test, + bool is_test) { web_ui_->GetRenderViewHost()->ExecuteJavascriptInWebFrame( string16(), UTF8ToUTF16(js_test)); - return WaitForResult(); + + if (is_test) + return WaitForResult(); + else + return true; } void WebUIHandlerBrowserTest::HandlePass(const ListValue* args) { diff --git a/content/browser/webui/web_ui_handler_browsertest.h b/content/browser/webui/web_ui_handler_browsertest.h index b19484a..62d7535 100644 --- a/content/browser/webui/web_ui_handler_browsertest.h +++ b/content/browser/webui/web_ui_handler_browsertest.h @@ -13,8 +13,8 @@ // This class registers test framework specific handlers on WebUI objects. class WebUIHandlerBrowserTest : public WebUIMessageHandler { public: - // Executes a string of javascript. Returns pass fail. - bool Execute(const std::string& js_test); + // Runs a string of javascript. Returns pass fail. + bool RunJavascript(const std::string& js_test, bool is_test); protected: // WebUI handlers which deliver results to any waiting message loops. |