Bug 1174624 - Add mochitest for MessagePort of nsFrameMessagemanager. r=baku

This commit is contained in:
Mantaroh Yoshinaga 2016-02-09 00:13:00 +01:00
Родитель 0d77c71c32
Коммит 7422895e7a
7 изменённых файлов: 306 добавлений и 0 удалений

Просмотреть файл

@ -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>