gecko-dev/dom/broadcastchannel/tests/test_broadcastchannel_any.html

139 строки
2.6 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test for BroadcastChannel</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<div id="content"></div>
<script type="application/javascript">
var tests = [
'hello world',
123,
null,
true,
new Date(),
[ 1, 'test', true, new Date() ],
{ a: true, b: null, c: new Date(), d: [ true, false, {} ] },
new Blob([123], { type: 'plain/text' })
];
var currentTest = null;
function getType(a) {
if (a === null || a === undefined)
return 'null';
if (Array.isArray(a))
return 'array';
if (typeof a == 'object')
return 'object';
return 'primitive';
}
function compare(a, b) {
is (getType(a), getType(b), 'Type matches');
var type = getType(a);
if (type == 'array') {
is (a.length, b.length, 'Array.length matches');
for (var i = 0; i < a.length; ++i) {
compare(a[i], b[i]);
}
return;
}
if (type == 'object') {
ok (a !== b, 'They should not match');
var aProps = [];
for (var p in a) aProps.push(p);
var bProps = [];
for (var p in b) bProps.push(p);
is (aProps.length, bProps.length, 'Props match');
is (aProps.sort().toSource(), bProps.sort().toSource(), 'Props match - using toSource()');
for (var p in a) {
compare(a[p], b[p]);
}
return;
}
if (type != 'null') {
is (a.toSource(), b.toSource(), 'Matching using toSource()');
}
}
function runTest() {
var count = 2;
var bc = new BroadcastChannel("foobar");
ok(bc, "BroadcastChannel can be created");
bc.onmessage = function(event) {
ok(count < 2, "Still comparing...");
info("bc: " + currentTest);
compare(event.data, currentTest);
++count;
next();
}
var bc2 = new BroadcastChannel("foobar");
ok(bc2, "BroadcastChannel can be created");
var toSkip = true;
bc2.onmessage = function(event) {
toSkip = !toSkip;
if (toSkip) return;
ok(count < 2, "Still comparing...");
info("bc2: " + currentTest);
compare(event.data, currentTest);
++count;
next();
}
function next() {
if (count < 2) {
return;
}
is(count, 2, "Just 2 comparations");
count = 0;
if (!tests.length) {
SimpleTest.finish();
return;
}
currentTest = tests.shift();
bc.postMessage(currentTest);
info("Posted: " + currentTest);
}
var worker = new Worker("broadcastchannel_worker_any.js");
worker.onmessage = function(event) {
if (event.data == "READY") {
next();
}
};
}
SimpleTest.waitForExplicitFinish();
runTest();
</script>
</body>
</html>