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