mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
129 lines
4.0 KiB
XML
129 lines
4.0 KiB
XML
<?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="MessageManager CPOW tests"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
onload="start()">
|
|
|
|
<!-- test results are displayed in the html:body -->
|
|
<label value="CPOWs"/>
|
|
|
|
<script type="application/javascript"><![CDATA[
|
|
var test_state = "remote";
|
|
var test_node = null;
|
|
|
|
function ok(condition, message) {
|
|
return opener.wrappedJSObject.ok(condition, message);
|
|
}
|
|
|
|
// Make sure that an error in this file actually causes the test to fail.
|
|
window.onerror = function (msg, url, line) {
|
|
ok(false, "Error while executing: \n" + msg + "\n" + url + ":" + line);
|
|
};
|
|
|
|
function testCpowMessage(message) {
|
|
ok(message.json.check == "ok", "correct json");
|
|
|
|
let data = message.objects.data;
|
|
let document = message.objects.document;
|
|
ok(data.i === 5, "integer property");
|
|
ok(data.b === true, "boolean property");
|
|
ok(data.s === "hello", "string property");
|
|
ok(data.x.i === 10, "nested property");
|
|
ok(data.f() === 99, "function call");
|
|
ok(document.title === "Hello, Kitty", "document node");
|
|
|
|
data.i = 6;
|
|
data.b = false;
|
|
data.s = "bye";
|
|
data.x = null;
|
|
ok(data.i === 6, "integer property");
|
|
ok(data.b === false, "boolean property");
|
|
ok(data.s === "bye", "string property");
|
|
ok(data.x === null, "nested property");
|
|
|
|
let throwing = message.objects.throwing;
|
|
// Based on the table on:
|
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
|
|
let tests = [
|
|
() => Object.getOwnPropertyDescriptor(throwing, 'test'),
|
|
() => Object.getOwnPropertyNames(throwing),
|
|
() => Object.defineProperty(throwing, 'test', {value: 1}),
|
|
() => delete throwing.test,
|
|
() => "test" in throwing,
|
|
() => Object.prototype.hasOwnProperty.call(throwing, 'test'),
|
|
() => throwing.test,
|
|
() => { throwing.test = 1 },
|
|
// () => { for (let prop in throwing) {} }, Bug 783829
|
|
() => { for (let prop of throwing) {} },
|
|
() => Object.keys(throwing),
|
|
() => Function.prototype.call.call(throwing),
|
|
() => new throwing,
|
|
() => Object.preventExtensions(throwing),
|
|
() => Object.freeze(throwing),
|
|
() => Object.seal(throwing),
|
|
]
|
|
|
|
for (let test of tests) {
|
|
let threw = false;
|
|
try {
|
|
test()
|
|
} catch (e) {
|
|
threw = true;
|
|
}
|
|
ok(threw, "proxy operation threw exception");
|
|
}
|
|
|
|
}
|
|
|
|
function recvAsyncMessage(message) {
|
|
testCpowMessage(message);
|
|
}
|
|
|
|
function recvSyncMessage(message) {
|
|
testCpowMessage(message);
|
|
}
|
|
|
|
function recvFailMessage(message) {
|
|
ok(false, message.json.message);
|
|
}
|
|
|
|
function recvDoneMessage(message) {
|
|
if (test_state == "remote") {
|
|
test_node.parentNode.removeChild(test_node);
|
|
run_tests("inprocess");
|
|
return;
|
|
}
|
|
|
|
finish();
|
|
}
|
|
|
|
function run_tests(type) {
|
|
var node = document.getElementById('cpowbrowser_' + type);
|
|
|
|
test_state = type;
|
|
test_node = node;
|
|
|
|
var mm = node.messageManager;
|
|
mm.addMessageListener("cpows:async", recvAsyncMessage);
|
|
mm.addMessageListener("cpows:sync", recvSyncMessage);
|
|
mm.addMessageListener("cpows:done", recvDoneMessage);
|
|
mm.addMessageListener("cpows:fail", recvFailMessage);
|
|
mm.loadFrameScript("chrome://mochitests/content/chrome/content/base/test/chrome/cpows_child.js", true);
|
|
}
|
|
|
|
function start() {
|
|
run_tests('remote');
|
|
}
|
|
|
|
function finish() {
|
|
opener.setTimeout("done()", 0);
|
|
window.close();
|
|
}
|
|
]]></script>
|
|
|
|
<browser type="content" src="about:blank" id="cpowbrowser_remote" remote="true"/>
|
|
<browser type="content" src="about:blank" id="cpowbrowser_inprocess"/>
|
|
</window>
|