diff options
Diffstat (limited to 'dom/broadcastchannel/tests/test_broadcastchannel_any.html')
-rw-r--r-- | dom/broadcastchannel/tests/test_broadcastchannel_any.html | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/dom/broadcastchannel/tests/test_broadcastchannel_any.html b/dom/broadcastchannel/tests/test_broadcastchannel_any.html new file mode 100644 index 000000000..2225e7cad --- /dev/null +++ b/dom/broadcastchannel/tests/test_broadcastchannel_any.html @@ -0,0 +1,138 @@ +<!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> + |