Commit 29602085 authored by Christopher Lam's avatar Christopher Lam Committed by Commit Bot

[Mojo WebUI] Modify testing framework to support Mojo Lite WebUIs.

This CL adds support to js2gtest for Mojo Lite WebUI Browser
Tests. This involves adding an extra mojo_lite_webui test type, and
adding the lite bindings to the page when a test is run.

Bug: 849993
Change-Id: Idadb098fb4c4a67535f59c80c8b4781a635da59b
Reviewed-on: https://chromium-review.googlesource.com/c/1309556Reviewed-by: default avatarDavid Tseng <dtseng@chromium.org>
Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: calamity <calamity@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606304}
parent 3fb63360
...@@ -22,7 +22,8 @@ template("js2gtest") { ...@@ -22,7 +22,8 @@ template("js2gtest") {
assert( assert(
defined(invoker.test_type) && defined(invoker.test_type) &&
(invoker.test_type == "webui" || invoker.test_type == "unit" || (invoker.test_type == "webui" || invoker.test_type == "unit" ||
invoker.test_type == "extension" || invoker.test_type == "mojo_webui")) invoker.test_type == "extension" || invoker.test_type == "mojo_webui" ||
invoker.test_type == "mojo_lite_webui"))
action_name = target_name + "_action" action_name = target_name + "_action"
source_set_name = target_name source_set_name = target_name
......
...@@ -50,13 +50,15 @@ var outputFile = arguments[4]; ...@@ -50,13 +50,15 @@ var outputFile = arguments[4];
/** /**
* Type of this test. * Type of this test.
* @type {string} ('extension' | 'unit' | 'webui') * @type {string} ('extension' | 'unit' | 'webui' | 'mojo_webui' |
* 'mojo_lite_webui')
*/ */
var testType = arguments[5]; var testType = arguments[5];
if (testType != 'extension' && if (testType != 'extension' &&
testType != 'unit' && testType != 'unit' &&
testType != 'webui' && testType != 'webui' &&
testType != 'mojo_webui') { testType != 'mojo_webui' &&
testType != 'mojo_lite_webui') {
print('Invalid test type: ' + testType); print('Invalid test type: ' + testType);
quit(-1); quit(-1);
} }
...@@ -148,6 +150,9 @@ ${argHint} ...@@ -148,6 +150,9 @@ ${argHint}
// ExtensionJSBrowserTest superclass. // ExtensionJSBrowserTest superclass.
// 'unit' - unit_tests harness, js2unit rule, V8UnitTest superclass. // 'unit' - unit_tests harness, js2unit rule, V8UnitTest superclass.
// 'mojo_webui' - browser_tests harness, js2webui rule, MojoWebUIBrowserTest // 'mojo_webui' - browser_tests harness, js2webui rule, MojoWebUIBrowserTest
// with mojo bindings.
// 'mojo_lite_webui' - browser_tests harness, js2webui rule,
// MojoWebUIBrowserTest with mojo_lite bindings.
// superclass. Uses Mojo to communicate test results. // superclass. Uses Mojo to communicate test results.
// 'webui' - browser_tests harness, js2webui rule, WebUIBrowserTest // 'webui' - browser_tests harness, js2webui rule, WebUIBrowserTest
// superclass. Uses chrome.send to communicate test results. // superclass. Uses chrome.send to communicate test results.
...@@ -161,7 +166,7 @@ ${argHint} ...@@ -161,7 +166,7 @@ ${argHint}
testing.Test.prototype.typedefCppFixture = 'V8UnitTest'; testing.Test.prototype.typedefCppFixture = 'V8UnitTest';
testF = 'TEST_F'; testF = 'TEST_F';
addSetPreloadInfo = false; addSetPreloadInfo = false;
} else if (testType === 'mojo_webui') { } else if (testType === 'mojo_webui' || testType === 'mojo_lite_webui') {
output('#include "chrome/test/base/mojo_web_ui_browser_test.h"'); output('#include "chrome/test/base/mojo_web_ui_browser_test.h"');
testing.Test.prototype.typedefCppFixture = 'MojoWebUIBrowserTest'; testing.Test.prototype.typedefCppFixture = 'MojoWebUIBrowserTest';
testF = 'IN_PROC_BROWSER_TEST_F'; testF = 'IN_PROC_BROWSER_TEST_F';
...@@ -493,6 +498,10 @@ ${testF}(${testFixture}, ${testFunction}) { ...@@ -493,6 +498,10 @@ ${testF}(${testFixture}, ${testFunction}) {
set_preload_test_fixture("${testFixture}"); set_preload_test_fixture("${testFixture}");
set_preload_test_name("${testFunction}");`); set_preload_test_name("${testFunction}");`);
} }
if(testType == 'mojo_lite_webui') {
output(`
set_use_mojo_lite_bindings();`);
}
if (testGenPreamble) if (testGenPreamble)
testGenPreamble(testFixture, testFunction); testGenPreamble(testFixture, testFunction);
if (browsePreload) if (browsePreload)
......
...@@ -68,6 +68,11 @@ void MojoWebUIBrowserTest::BrowsePreload(const GURL& browse_to) { ...@@ -68,6 +68,11 @@ void MojoWebUIBrowserTest::BrowsePreload(const GURL& browse_to) {
WebUIBrowserTest::BrowsePreload(browse_to); WebUIBrowserTest::BrowsePreload(browse_to);
content::WebContents* web_contents = content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents(); browser()->tab_strip_model()->GetActiveWebContents();
web_contents->GetMainFrame()->ExecuteJavaScriptForTests( if (use_mojo_lite_bindings_) {
l10n_util::GetStringUTF16(IDR_WEB_UI_TEST_MOJO_JS)); web_contents->GetMainFrame()->ExecuteJavaScriptForTests(
l10n_util::GetStringUTF16(IDR_WEB_UI_TEST_MOJO_LITE_JS));
} else {
web_contents->GetMainFrame()->ExecuteJavaScriptForTests(
l10n_util::GetStringUTF16(IDR_WEB_UI_TEST_MOJO_JS));
}
} }
...@@ -21,6 +21,8 @@ class MojoWebUIBrowserTest : public WebUIBrowserTest, ...@@ -21,6 +21,8 @@ class MojoWebUIBrowserTest : public WebUIBrowserTest,
MojoWebUIBrowserTest(); MojoWebUIBrowserTest();
~MojoWebUIBrowserTest() override; ~MojoWebUIBrowserTest() override;
void set_use_mojo_lite_bindings() { use_mojo_lite_bindings_ = true; }
// WebUIBrowserTest: // WebUIBrowserTest:
void BrowsePreload(const GURL& browse_to) override; void BrowsePreload(const GURL& browse_to) override;
void SetUpOnMainThread() override; void SetUpOnMainThread() override;
...@@ -36,6 +38,7 @@ class MojoWebUIBrowserTest : public WebUIBrowserTest, ...@@ -36,6 +38,7 @@ class MojoWebUIBrowserTest : public WebUIBrowserTest,
void BindTestRunner(web_ui_test::mojom::TestRunnerRequest request); void BindTestRunner(web_ui_test::mojom::TestRunnerRequest request);
service_manager::BinderRegistry registry_; service_manager::BinderRegistry registry_;
bool use_mojo_lite_bindings_ = false;
}; };
#endif // CHROME_TEST_BASE_MOJO_WEB_UI_BROWSER_TEST_H_ #endif // CHROME_TEST_BASE_MOJO_WEB_UI_BROWSER_TEST_H_
...@@ -805,10 +805,20 @@ function testDone(result) { ...@@ -805,10 +805,20 @@ function testDone(result) {
result = testResult(); result = testResult();
if (hasWindow && window.webUiTest) { if (hasWindow && window.webUiTest) {
// For MojoWebUI tests. let testRunner;
var testRunner = new webUiTest.mojom.TestRunnerPtr(); if (webUiTest.mojom.TestRunnerPtr) {
Mojo.bindInterface( // For mojo WebUI tests.
webUiTest.mojom.TestRunner.name, mojo.makeRequest(testRunner).handle); testRunner = new webUiTest.mojom.TestRunnerPtr();
Mojo.bindInterface(
webUiTest.mojom.TestRunner.name,
mojo.makeRequest(testRunner).handle);
} else if (webUiTest.mojom.TestRunnerProxy) {
// For mojo-lite WebUI tests.
testRunner = webUiTest.mojom.TestRunner.getProxy();
} else {
assertNotReached(
'Mojo bindings found, but no valid test interface loaded');
}
if (result[0]) if (result[0])
testRunner.testComplete(); testRunner.testComplete();
else else
...@@ -820,6 +830,8 @@ function testDone(result) { ...@@ -820,6 +830,8 @@ function testDone(result) {
// For extension tests. // For extension tests.
valueResult = {'result': result[0], message: result[1]}; valueResult = {'result': result[0], message: result[1]};
window.domAutomationController.send(JSON.stringify(valueResult)); window.domAutomationController.send(JSON.stringify(valueResult));
} else {
assertNotReached('No test framework available');
} }
errors.splice(0, errors.length); errors.splice(0, errors.length);
} else { } else {
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<includes> <includes>
<include name="IDR_WEBUI_TEST_I18N_PROCESS_CSS_TEST" file="webui/i18n_process_css_test.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_WEBUI_TEST_I18N_PROCESS_CSS_TEST" file="webui/i18n_process_css_test.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
<include name="IDR_WEB_UI_TEST_MOJO_JS" file="${root_gen_dir}/chrome/test/data/webui/web_ui_test.mojom.js" use_base_dir="false" type="BINDATA"/> <include name="IDR_WEB_UI_TEST_MOJO_JS" file="${root_gen_dir}/chrome/test/data/webui/web_ui_test.mojom.js" use_base_dir="false" type="BINDATA"/>
<include name="IDR_WEB_UI_TEST_MOJO_LITE_JS" file="${root_gen_dir}/chrome/test/data/webui/web_ui_test.mojom-lite.js" use_base_dir="false" type="BINDATA"/>
</includes> </includes>
</release> </release>
</grit> </grit>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment