WebCore:
[WebKit-https.git] / LayoutTests / fast / workers / worker-script-error.html
1 <body>
2 <p>Test Worker script error handling functionality. Should print a series of PASS messages, followed with DONE.</p>
3 <div id=result></div>
4 <script>
5 function log(message)
6 {
7     document.getElementById("result").innerHTML += message + "<br>";
8 }
9
10 var testCases = [
11     "testInvalidScriptSyntax",
12     "testScriptErrorUnhandled",
13     "testErrorInHandlingScriptError",
14     "testScriptErrorBubbledAndHandledInWorker",
15     "testScriptErrorBubbledAndReportedToUser",
16     "testScriptErrorHandled",
17 ];
18 var testIndex = 0;
19
20 function runNextTest()
21 {
22     if (testIndex < testCases.length) {
23         testIndex++;
24         window[testCases[testIndex - 1]]();
25     } else {
26         log("DONE");
27         if (window.layoutTestController)
28             layoutTestController.notifyDone();
29     }
30 }
31
32 function testInvalidScriptSyntax()
33 {
34     try {
35         var worker = new Worker("resources/worker-invalid-syntax.js");
36         worker.onerror = function() {
37             log("PASS: onerror invoked for a script that has invalid syntax.");
38             runNextTest();
39             return false;
40         }
41     } catch (ex) {
42         log("FAIL: unexpected exception " + ex);
43         runNextTest();
44     }
45 }
46
47 function testScriptErrorUnhandled()
48 {
49     try {
50         var worker = new Worker("resources/worker-script-error-unhandled.js");
51         worker.onerror = function(evt) {
52             log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + ".");
53             runNextTest();
54             return false;
55         }
56     } catch (ex) {
57         log("FAIL: unexpected exception " + ex);
58         runNextTest();
59     }
60 }
61
62 function testErrorInHandlingScriptError()
63 {
64     try {
65         var worker = new Worker("resources/worker-error-in-handling-script-error.js");
66         worker.onerror = function(evt) {
67             log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + ".");
68             runNextTest();
69             return false;
70         }
71     } catch (ex) {
72         log("FAIL: unexpected exception " + ex);
73         runNextTest();
74     }
75 }
76
77 function testScriptErrorBubbledAndHandledInWorker()
78 {
79     try {
80         var worker = new Worker("resources/worker-script-error-bubbled.js");
81         worker.onerror = function(evt) {
82             log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + ".");
83             runNextTest();
84             return false;
85         }
86     } catch (ex) {
87         log("FAIL: unexpected exception " + ex);
88         runNextTest();
89     }
90 }
91
92 function testScriptErrorBubbledAndReportedToUser()
93 {
94     try {
95         var worker = new Worker("resources/worker-script-error-bubbled.js");
96         worker.onerror = function(evt) {
97             log("PASS: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + ".");
98             runNextTest();
99             return true;
100         }
101     } catch (ex) {
102         log("FAIL: unexpected exception " + ex);
103         runNextTest();
104     }
105 }
106
107 function testScriptErrorHandled()
108 {
109     try {
110         var worker = new Worker("resources/worker-script-error-handled.js");
111         worker.onerror = function(evt) {
112             log("FAIL: onerror invoked for a script that has script error '" + evt.message + "' at line " + evt.lineno + ".");
113             runNextTest();
114             return false;
115         }
116         worker.onmessage = function(evt) {
117             log("PASS: message received from WorkerGlobalScope.onerror: " + evt.data + ".");
118             runNextTest();
119         }
120     } catch (ex) {
121         log("FAIL: unexpected exception " + ex);
122         runNextTest();
123     }
124 }
125
126 if (window.layoutTestController) {
127     layoutTestController.dumpAsText();
128     layoutTestController.waitUntilDone();
129 }
130
131 runNextTest();
132
133 </script>
134 </body>
135