WebCore:
[WebKit-https.git] / LayoutTests / fast / workers / worker-constructor.html
1 <body>
2 <p>Test Worker constructor 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     "testArgumentException",
12     "testRecursiveWorkerCreation",
13     "testNoArgument",
14     "testEmptyScriptUrl",
15     "testInvalidScriptUrl",
16     "testNotExistentScriptUrl",
17     "testSuccessWorkerCreation",
18 ];
19 var testIndex = 0;
20
21 function runNextTest()
22 {
23     if (testIndex < testCases.length) {
24         testIndex++;
25         window[testCases[testIndex - 1]]();
26     } else {
27         log("DONE");
28         if (window.layoutTestController)
29             layoutTestController.notifyDone();
30     }
31 }
32
33 function testArgumentException()
34 {
35     try {
36         new Worker({toString:function(){throw "exception"}})
37         log("FAIL: toString exception not propagated.");
38     } catch (ex) {
39         if (ex == "exception")
40             log("PASS: toString exception propagated correctly.");
41         else
42             log("FAIL: unexpected exception (" + ex + ") received instead of one propagated from toString.");
43     }
44     runNextTest();
45 }
46
47 function testRecursiveWorkerCreation()
48 {
49     try {
50         var foo = {toString:function(){new Worker(foo)}}
51         new Worker(foo);
52         log("FAIL: no exception when trying to create workers recursively");
53     } catch (ex) {
54         log("PASS: trying to create workers recursively resulted in an exception (" + ex + ")");
55     }
56     runNextTest();
57 }
58
59 function testNoArgument()
60 {
61     try {
62         new Worker();
63         log("FAIL: invoking Worker constructor without arguments did not result in an exception");
64     } catch (ex) {
65         log("PASS: invoking Worker constructor without arguments resulted in an exception (" + ex + ")");
66     }
67     runNextTest();
68 }
69
70 function testEmptyScriptUrl()
71 {
72     try {
73         var worker = new Worker("");
74         worker.onerror = function() {
75             log("FAIL: onerror invoked for an empty script URL.");
76             runNextTest();
77         }
78     } catch (ex) {
79         log("PASS: invoking Worker constructor with empty script URL resulted in an exception (" + ex + ")");
80         runNextTest();
81     }
82 }
83
84 function testInvalidScriptUrl()
85 {
86     try {
87         var worker = new Worker("http://invalid:123$");
88         worker.onerror = function() {
89             log("FAIL: onerror invoked for an invalid script URL.");
90             runNextTest();
91         }
92     } catch (ex) {
93         log("PASS: invoking Worker constructor with invalid script URL resulted in an exception (" + ex + ")");
94         runNextTest();
95     }
96 }
97
98 function testNotExistentScriptUrl()
99 {
100     try {
101         var worker = new Worker("does-not-exist.js");
102         worker.onerror = function() {
103             log("PASS: onerror invoked for a script that could not be loaded.");
104             runNextTest();
105         }
106     } catch (ex) {
107         log("FAIL: unexpected exception " + ex);
108         runNextTest();
109     }
110 }
111
112 function testSuccessWorkerCreation()
113 {
114     try {
115         var worker = new Worker("resources/worker-common.js");
116         // Make sure attributes from both Worker and AbstractWorker are visible.
117         if (!worker.postMessage)
118             log("FAIL: worker.postMessage did not exist.");
119         else if (!worker.addEventListener)
120             log("FAIL: worker.addEventListener did not exist.");
121         else
122             log("PASS: Successfully created worker.");
123     } catch (ex) {
124         log("FAIL: unexpected exception (" + ex + ") thrown when creating worker");
125     }
126     runNextTest();
127 }
128
129 if (window.layoutTestController) {
130     layoutTestController.dumpAsText();
131     layoutTestController.waitUntilDone();
132 }
133
134 runNextTest();
135
136 </script>
137 </body>