1 if (window.layoutTestController) {
2 layoutTestController.dumpAsText();
3 layoutTestController.waitUntilDone();
6 var console = document.getElementById("console");
11 function equal(actual, expected)
13 if (actual === expected)
15 if (typeof actual !== typeof expected)
17 if ((actual instanceof Date) || (expected instanceof Date)) {
18 if ((actual instanceof Date) && (expected instanceof Date))
19 return (expected instanceof Date) && actual.getTime() == expected.getTime();
22 if ((actual instanceof Number) || (expected instanceof Number)) {
23 return (actual instanceof Number) && (expected instanceof Number) &&
24 (expected.valueOf() == actual.valueOf());
26 if ((actual instanceof Boolean) || (expected instanceof Boolean)) {
27 return (actual instanceof Boolean) && (expected instanceof Boolean) &&
28 (expected.valueOf() == actual.valueOf());
30 if ((actual instanceof String) || (expected instanceof String)) {
31 return (actual instanceof String) && (expected instanceof String) &&
32 (expected.valueOf() == actual.valueOf());
34 if (Array.isArray(actual) || Array.isArray(expected)) {
35 if (!Array.isArray(actual) || !Array.isArray(expected))
37 if (actual.length != expected.length)
39 for (var i = 0; i < actual.length; i++) {
40 if ((i in actual) ^ (i in expected))
42 if (!equal(actual[i], expected[i]))
47 if (actual.constructor !== expected.constructor)
50 var keys = Object.keys(actual);
55 if (!equal(keys, Object.keys(expected)))
60 for (var i = 0; i < keys.length; i++) {
61 if (!equal(actual[keys[i]], expected[keys[i]]))
67 function safeToString(o) {
68 if (o instanceof Date)
69 return o.toISOString();
70 if (typeof o !== "object" || !o)
75 return Object.prototype.toString.call(o) + "(default toString threw "+e+")";
79 function shouldBe(actual, expected)
81 var actualValue = eval(actual);
82 var expectedValue = eval(expected);
83 if (equal(actualValue, expectedValue))
84 console.innerHTML += "PASS: " + actual + " is " + safeToString(expectedValue) + " of type " + typeof actualValue + "<br>";
86 console.innerHTML += "FAIL: " + actual + " is " + actualValue + " should be " + expectedValue + " of type " + typeof expectedValue + "<br>";
89 function shouldBeIdentical(actual, expected)
91 var actualValue = eval(actual);
92 var expectedValue = eval(expected);
93 if (actualValue === expectedValue)
94 console.innerHTML += "PASS: " + actual + " is === to " + expected + "<br>";
96 console.innerHTML += "FAIL: " + actual + " is not === to " + expected + "<br>";
99 function doPass(msg) {
100 console.innerHTML += "PASS: " + msg + "<br>";
103 function doFail(msg) {
104 console.innerHTML += "FAIL: " + msg + "<br>";
107 window.doPassFail = function(result, msg) {
108 console.innerHTML += (result ? "PASS: " : "FAIL: ") + msg + "<br>";
111 function onmessage(evt) {
112 eventData = evt.data;
113 if (evt.data !== evt.data)
114 console.innerHTML += "MessageEvent.data does not produce the same value on multiple queries. " + evt.data + ", " + evt.data + "<br>";
115 var message = messages.shift();
118 shouldBeIdentical("eventData", "eventData.self");
121 shouldBeIdentical("eventData", "eventData[0]");
124 shouldBeIdentical("eventData.graph1", "eventData.graph2");
127 shouldBeIdentical("eventData[0]", "eventData[1]");
130 var thunk = evalThunks.shift();
134 doFail("threw exception: " + e);
139 shouldBe("eventData", message);
142 if (safeToString(evt.data) == 'done' && window.layoutTestController)
143 layoutTestController.notifyDone();
146 window.addEventListener('message', onmessage, false);
148 function ConstructorWithPrototype(s) {
152 ConstructorWithPrototype.prototype = {
156 window.tryPostMessage = function(message, shouldThrow, expected, expectedExceptionOrEvalThunk) {
157 if (expected == "evalThunk") {
158 var evalThunk = expectedExceptionOrEvalThunk;
160 var expectedException = expectedExceptionOrEvalThunk;
163 var value = eval(message);
164 postMessage(value, "*");
166 console.innerHTML += "FAIL: 'postMessage("+message+")' should throw but didn't<br>";
167 messages.push(expected || message);
168 if (expected == "evalThunk") {
169 evalThunks.push(evalThunk);
173 if (expectedException === undefined || expectedException == e.code || expectedException == e) {
174 console.innerHTML += "PASS: 'postMessage("+message+")' threw " + e + "<br>";
176 console.innerHTML += "FAIL: 'postMessage("+message+")' threw " + e + ", was expecting " + expectedException + "<br>";
179 console.innerHTML += "FAIL: 'postMessage("+message+")' should not throw but threw " + e + "<br>";