зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1174624 - Add mochitest for MessagePort of nsFrameMessagemanager. r=baku
This commit is contained in:
Родитель
0d77c71c32
Коммит
7422895e7a
|
@ -1,5 +1,12 @@
|
|||
[DEFAULT]
|
||||
support-files =
|
||||
iframe_messageChannel_chrome.html
|
||||
mm_messageChannelParent.xul
|
||||
mm_messageChannelParentNotRemote.xul
|
||||
mm_messageChannelParent.js
|
||||
mm_messageChannel.js
|
||||
|
||||
[test_messageChannel.xul]
|
||||
[test_messageChannelWithMessageManager.xul]
|
||||
skip-if = os == 'android'
|
||||
[test_messageChannelWithMessageManagerNotRemote.xul]
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
function debug(msg) {
|
||||
dump("[mmMessageChannelChild]" + msg + "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Preparation Test
|
||||
*/
|
||||
let port;
|
||||
let toString = Object.prototype.toString;
|
||||
|
||||
(function prepare() {
|
||||
debug("Script loaded.");
|
||||
addTestReceiver();
|
||||
sendAsyncMessage("mmMessagePort:finishScriptLoad", {}, {});
|
||||
})();
|
||||
|
||||
function ok(condition, message) {
|
||||
debug('condition: ' + condition + ', ' + message + '\n');
|
||||
if (!condition) {
|
||||
sendAsyncMessage("mmMessagePort:fail", { message: message });
|
||||
throw 'failed check: ' + message;
|
||||
}
|
||||
}
|
||||
|
||||
function is(a, b, message) {
|
||||
ok(a===b, message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Testing codes.
|
||||
*/
|
||||
function addTestReceiver() {
|
||||
addMessageListener("BasicTest:PortCreated", basicTest);
|
||||
addMessageListener("CloseTest:PortCreated", closeTest);
|
||||
addMessageListener("EmptyTest:PortCreated", emptyTest);
|
||||
addMessageListener("NotTransferableTest:PortCreated", notTransferableTest);
|
||||
}
|
||||
|
||||
function basicTest(msg) {
|
||||
port = msg.ports[0];
|
||||
is(toString.call(port), "[object MessagePort]", "created MessagePort.");
|
||||
|
||||
port.onmessage = (msg) => {
|
||||
is(msg.data, "BasicTest:StartTest", "Replied message is correct.");
|
||||
port.postMessage("BasicTest:TestOK");
|
||||
};
|
||||
|
||||
sendAsyncMessage("BasicTest:FinishPrepare", { message: "OK" });
|
||||
}
|
||||
|
||||
function closeTest(msg) {
|
||||
port = msg.ports[0];
|
||||
is(toString.call(port), "[object MessagePort]", "created MessagePort.");
|
||||
|
||||
port.onmessage = (msg) => {
|
||||
ok(msg.data,"CloseTest:StartTest", "Replied message is correct.");
|
||||
port.postMessage("CloseTest:TestOK");
|
||||
};
|
||||
|
||||
port.close();
|
||||
|
||||
sendAsyncMessage("CloseTest:FinishPrepare", { message: "OK"});
|
||||
}
|
||||
|
||||
function emptyTest(msg) {
|
||||
let portSize = msg.ports.length;
|
||||
is(portSize, 0, "transfered port size is zero.");
|
||||
|
||||
sendAsyncMessage("EmptyTest:FinishPrepare", { message: "OK"});
|
||||
}
|
||||
|
||||
function notTransferableTest(msg) {
|
||||
sendAsyncMessage("NotTransferableTest:FinishPrepare", {message: "OK"});
|
||||
}
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
let port;
|
||||
let mm;
|
||||
|
||||
function info(message) {
|
||||
return opener.wrappedJSObject.info(message);
|
||||
}
|
||||
|
||||
function ok(condition, message) {
|
||||
return opener.wrappedJSObject.ok(condition, message);
|
||||
}
|
||||
|
||||
function is(v1, v2, message) {
|
||||
return opener.wrappedJSObject.is(v1, v2, message);
|
||||
}
|
||||
|
||||
function todo_is(v1, v2, message) {
|
||||
return opener.wrappedJSObject.todo_is(v1, v2, message);
|
||||
}
|
||||
|
||||
function finish() {
|
||||
opener.setTimeout("done()", 0);
|
||||
window.close();
|
||||
}
|
||||
|
||||
function debug(msg) {
|
||||
dump("[mmMessageChannelParent]" + msg + "\n");
|
||||
}
|
||||
|
||||
let tests = [ basic_test,
|
||||
close_test,
|
||||
empty_transferable,
|
||||
not_transferable];
|
||||
|
||||
// Test Routine
|
||||
function run_tests() {
|
||||
let test = tests.shift();
|
||||
if (test === undefined) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
test(function() {
|
||||
setTimeout(run_tests,0);
|
||||
});
|
||||
}
|
||||
|
||||
// Basic communication test.
|
||||
function basic_test(finish) {
|
||||
ok(mm, "basic_test");
|
||||
|
||||
let finishPrepare = (msg) => {
|
||||
is(msg.data.message, "OK", "");
|
||||
ok(port, "");
|
||||
port.onmessage = (msg) => {
|
||||
is(msg.data, "BasicTest:TestOK", "");
|
||||
finish();
|
||||
}
|
||||
port.postMessage("BasicTest:StartTest");
|
||||
mm.removeMessageListener("BasicTest:FinishPrepare", finishPrepare);
|
||||
};
|
||||
|
||||
let channel = new MessageChannel();
|
||||
port = channel.port2;
|
||||
mm.addMessageListener("BasicTest:FinishPrepare", finishPrepare);
|
||||
mm.sendAsyncMessage("BasicTest:PortCreated", {}, {}, undefined, [channel.port1]);
|
||||
}
|
||||
|
||||
// Communicate with closed port.
|
||||
function close_test(finish) {
|
||||
ok(mm, "close_test");
|
||||
|
||||
let finishPrepare = (msg) => {
|
||||
is(msg.data.message, "OK", "");
|
||||
ok(port, "");
|
||||
|
||||
port.onmessage = (msg) => {
|
||||
ok(false, "Port is alive.");
|
||||
finish();
|
||||
}
|
||||
|
||||
port.postMessage("CloseTest:StartTest");
|
||||
mm.removeMessageListener("CloseTest:FinishPrepare", finishPrepare);
|
||||
finish();
|
||||
}
|
||||
|
||||
let channel = new MessageChannel();
|
||||
port = channel.port2;
|
||||
mm.addMessageListener("CloseTest:FinishPrepare", finishPrepare);
|
||||
mm.sendAsyncMessage("CloseTest:PortCreated", {}, {}, undefined, [channel.port1]);
|
||||
}
|
||||
|
||||
// Empty transferable object
|
||||
function empty_transferable(finish) {
|
||||
ok(mm, "empty_transferable");
|
||||
|
||||
let finishPrepare = (msg) => {
|
||||
ok(true, "Same basic test.");
|
||||
mm.removeMessageListener("EmptyTest:FinishPrepare", finishPrepare);
|
||||
finish();
|
||||
};
|
||||
|
||||
mm.addMessageListener("EmptyTest:FinishPrepare", finishPrepare);
|
||||
mm.sendAsyncMessage("EmptyTest:PortCreated", {}, {}, undefined, []);
|
||||
}
|
||||
|
||||
// Not transferable object.
|
||||
function not_transferable(finish) {
|
||||
ok(mm, "not_transferable");
|
||||
|
||||
let finishPrepare = (msg) => {
|
||||
ok(true, "Same basic test.");
|
||||
finish();
|
||||
}
|
||||
|
||||
mm.addMessageListener("NotTransferableTest:FinishPrepare", finishPrepare);
|
||||
mm.sendAsyncMessage("NotTransferableTest:PortCreated", {}, {}, undefined, [""]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test preparation
|
||||
*/
|
||||
function finishLoad(msg) {
|
||||
run_tests();
|
||||
}
|
||||
|
||||
function prepare_test() {
|
||||
debug("start run_tests()");
|
||||
var node = document.getElementById('messagechannel_remote');
|
||||
mm = node.messageManager; //Services.ppmm.getChildAt(1);
|
||||
ok(mm, "created MessageManager.")
|
||||
|
||||
mm.addMessageListener("mmMessagePort:finishScriptLoad", finishLoad);
|
||||
mm.addMessageListener("mmMessagePort:fail", failed_test);
|
||||
//mm.loadProcessScript("chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js", true);
|
||||
mm.loadFrameScript("chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js", true);
|
||||
ok(true, "Loaded");
|
||||
}
|
||||
|
||||
function failed_test() {
|
||||
debug("failed test in child process");
|
||||
ok(false, "");
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<window title="Test MessageChannel API with nsFrameMessageManager(bug 1174624)"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="prepare_test()">
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannelParent.js"></script>
|
||||
<browser type="content" src="about:blank" id="messagechannel_remote" remote="true"/>
|
||||
</window>
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<window title="Test MessageChannel API with nsFrameMessageManager(bug 1174624)"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="prepare_test()">
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannelParent.js"></script>
|
||||
<browser type="content" src="about:blank" id="messagechannel_remote"/>
|
||||
</window>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<window title="Test MessageChannel API with nsFrameMessageManager(bug 1174624)"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function done() {
|
||||
info("done called");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("mm_messageChannelParent.xul", "", "chrome");
|
||||
});
|
||||
]]></script>
|
||||
</window>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<window title="Test MessageChannel API with nsFrameMessageManager(bug 1174624)"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function done() {
|
||||
info("done called");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("mm_messageChannelParentNotRemote.xul", "", "chrome");
|
||||
});
|
||||
]]></script>
|
||||
</window>
|
Загрузка…
Ссылка в новой задаче