blob: 5ba8b481983d34d860a24768ff62a79914c8987b [file] [log] [blame]
<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>