summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-30 21:37:16 +0000
committerdtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-30 21:37:16 +0000
commitc3fea5f8118111c0263ea7a6404e64da121194d3 (patch)
tree59677ccac6c52f87b14cac72cc1c5e2d77ef5bd4
parent99d364a272e478b323e08798b68811185f7cb965 (diff)
downloadchromium_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.cc10
-rw-r--r--chrome/test/data/webui/sample_downloads.js16
-rw-r--r--chrome/test/data/webui/settings_set_boolean_pref_triggers.js4
-rw-r--r--chrome/test/data/webui/test_api.js28
-rw-r--r--content/browser/webui/web_ui_browsertest.cc35
-rw-r--r--content/browser/webui/web_ui_browsertest.h22
-rw-r--r--content/browser/webui/web_ui_handler_browsertest.cc9
-rw-r--r--content/browser/webui/web_ui_handler_browsertest.h4
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.