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") {
assert(
defined(invoker.test_type) &&
(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"
source_set_name = target_name
......
......@@ -50,13 +50,15 @@ var outputFile = arguments[4];
/**
* Type of this test.
* @type {string} ('extension' | 'unit' | 'webui')
* @type {string} ('extension' | 'unit' | 'webui' | 'mojo_webui' |
* 'mojo_lite_webui')
*/
var testType = arguments[5];
if (testType != 'extension' &&
testType != 'unit' &&
testType != 'webui' &&
testType != 'mojo_webui') {
testType != 'mojo_webui' &&
testType != 'mojo_lite_webui') {
print('Invalid test type: ' + testType);
quit(-1);
}
......@@ -148,6 +150,9 @@ ${argHint}
// ExtensionJSBrowserTest superclass.
// 'unit' - unit_tests harness, js2unit rule, V8UnitTest superclass.
// '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.
// 'webui' - browser_tests harness, js2webui rule, WebUIBrowserTest
// superclass. Uses chrome.send to communicate test results.
......@@ -161,7 +166,7 @@ ${argHint}
testing.Test.prototype.typedefCppFixture = 'V8UnitTest';
testF = 'TEST_F';
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"');
testing.Test.prototype.typedefCppFixture = 'MojoWebUIBrowserTest';
testF = 'IN_PROC_BROWSER_TEST_F';
......@@ -493,6 +498,10 @@ ${testF}(${testFixture}, ${testFunction}) {
set_preload_test_fixture("${testFixture}");
set_preload_test_name("${testFunction}");`);
}
if(testType == 'mojo_lite_webui') {
output(`
set_use_mojo_lite_bindings();`);
}
if (testGenPreamble)
testGenPreamble(testFixture, testFunction);
if (browsePreload)
......
......@@ -68,6 +68,11 @@ void MojoWebUIBrowserTest::BrowsePreload(const GURL& browse_to) {
WebUIBrowserTest::BrowsePreload(browse_to);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
web_contents->GetMainFrame()->ExecuteJavaScriptForTests(
l10n_util::GetStringUTF16(IDR_WEB_UI_TEST_MOJO_JS));
if (use_mojo_lite_bindings_) {
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,
MojoWebUIBrowserTest();
~MojoWebUIBrowserTest() override;
void set_use_mojo_lite_bindings() { use_mojo_lite_bindings_ = true; }
// WebUIBrowserTest:
void BrowsePreload(const GURL& browse_to) override;
void SetUpOnMainThread() override;
......@@ -36,6 +38,7 @@ class MojoWebUIBrowserTest : public WebUIBrowserTest,
void BindTestRunner(web_ui_test::mojom::TestRunnerRequest request);
service_manager::BinderRegistry registry_;
bool use_mojo_lite_bindings_ = false;
};
#endif // CHROME_TEST_BASE_MOJO_WEB_UI_BROWSER_TEST_H_
......@@ -805,10 +805,20 @@ function testDone(result) {
result = testResult();
if (hasWindow && window.webUiTest) {
// For MojoWebUI tests.
var testRunner = new webUiTest.mojom.TestRunnerPtr();
Mojo.bindInterface(
webUiTest.mojom.TestRunner.name, mojo.makeRequest(testRunner).handle);
let testRunner;
if (webUiTest.mojom.TestRunnerPtr) {
// For mojo WebUI tests.
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])
testRunner.testComplete();
else
......@@ -820,6 +830,8 @@ function testDone(result) {
// For extension tests.
valueResult = {'result': result[0], message: result[1]};
window.domAutomationController.send(JSON.stringify(valueResult));
} else {
assertNotReached('No test framework available');
}
errors.splice(0, errors.length);
} else {
......
......@@ -10,6 +10,7 @@
<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_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>
</release>
</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