194 lines
5.8 KiB
HTML
194 lines
5.8 KiB
HTML
<body>
|
|
<p>Test Worker script error handling functionality. Should print a series of PASS messages, followed with DONE.</p>
|
|
<div id=result></div>
|
|
<script>
|
|
function log(message)
|
|
{
|
|
document.getElementById("result").innerHTML += message + "<br>";
|
|
}
|
|
|
|
var testCases = [
|
|
"testInvalidScriptSyntax",
|
|
"testScriptErrorUnhandled",
|
|
"testScriptErrorAddEventListener",
|
|
"testErrorInHandlingScriptError",
|
|
"testScriptErrorBubbledAndHandledInWorker",
|
|
"testScriptErrorBubbledAndReportedToUser",
|
|
"testScriptErrorHandled",
|
|
"testExceptionInTimeoutCallback",
|
|
"testScriptErrorInWorkerAndSpawner",
|
|
];
|
|
var testIndex = 0;
|
|
|
|
function runNextTest()
|
|
{
|
|
if (testIndex < testCases.length) {
|
|
testIndex++;
|
|
window[testCases[testIndex - 1]]();
|
|
} else {
|
|
log("DONE");
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
}
|
|
|
|
function testInvalidScriptSyntax()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-invalid-syntax.js");
|
|
worker.onerror = function() {
|
|
log("PASS: onerror invoked for a script that has invalid syntax.");
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorUnhandled()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error-unhandled.js");
|
|
worker.onerror = function(evt) {
|
|
log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorAddEventListener()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error-unhandled.js");
|
|
worker.addEventListener("error",
|
|
function(evt) {
|
|
log("PASS: event listener invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
runNextTest();
|
|
evt.preventDefault();
|
|
}, false);
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testErrorInHandlingScriptError()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-error-in-handling-script-error.js");
|
|
var errorCount = 0;
|
|
worker.onerror = function(evt) {
|
|
log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
++errorCount;
|
|
// Second error happens in the onerror handler. Run next test only when it's reported.
|
|
if (errorCount == 2)
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorBubbledAndHandledInWorker()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error-bubbled.js");
|
|
worker.onmessage = function(evt) {
|
|
log("message from worker: \"" + evt.data + "\".");
|
|
}
|
|
worker.onerror = function(evt) {
|
|
log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorBubbledAndReportedToUser()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error-bubbled.js");
|
|
worker.onerror = function(evt) {
|
|
log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
runNextTest();
|
|
return true;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorHandled()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error-handled.js");
|
|
worker.onerror = function(evt) {
|
|
log("FAIL: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + " and column " + evt.colno + ".");
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
worker.onmessage = function(evt) {
|
|
log("PASS: message received from WorkerGlobalScope.onerror: " + evt.data + ".");
|
|
runNextTest();
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testExceptionInTimeoutCallback()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-exception-in-timeout-callback.js");
|
|
worker.onerror = function() {
|
|
log("PASS: onerror invoked for an exception in setTimeout callback.");
|
|
runNextTest();
|
|
return false;
|
|
}
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
function testScriptErrorInWorkerAndSpawner()
|
|
{
|
|
try {
|
|
var worker = new Worker("resources/worker-script-error.js");
|
|
worker.addEventListener("message", function(event) {
|
|
log("PASS: message received from WorkerGlobalScope.onerror: " + event.data);
|
|
});
|
|
worker.addEventListener("error", function(event) {
|
|
log("PASS: Main World saw error event with: " + event.error);
|
|
runNextTest();
|
|
});
|
|
} catch (ex) {
|
|
log("FAIL: unexpected exception " + ex);
|
|
runNextTest();
|
|
}
|
|
}
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
runNextTest();
|
|
|
|
</script>
|
|
</body>
|
|
|