|
1 <!-- |
|
2 Any copyright is dedicated to the Public Domain. |
|
3 http://creativecommons.org/publicdomain/zero/1.0/ |
|
4 --> |
|
5 <!DOCTYPE HTML> |
|
6 <html> |
|
7 <!-- |
|
8 Tests of DOM Worker transferable objects |
|
9 --> |
|
10 <head> |
|
11 <title>Test for DOM Worker transferable objects</title> |
|
12 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
13 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
14 </head> |
|
15 <body> |
|
16 <p id="display"></p> |
|
17 <div id="content" style="display: none"> |
|
18 |
|
19 </div> |
|
20 <pre id="test"> |
|
21 <script class="testbody" language="javascript"> |
|
22 |
|
23 function test1(sizes) { |
|
24 if (!sizes.length) { |
|
25 runTests(); |
|
26 return; |
|
27 } |
|
28 |
|
29 var size = sizes.pop(); |
|
30 |
|
31 var worker = new Worker("transferable_worker.js"); |
|
32 worker.onmessage = function(event) { |
|
33 ok(event.data.status, event.data.event); |
|
34 if (!event.data.status) { |
|
35 runTests(); |
|
36 return; |
|
37 } |
|
38 |
|
39 if ("notEmpty" in event.data && "byteLength" in event.data.notEmpty) { |
|
40 ok(event.data.notEmpty.byteLength != 0, |
|
41 "P: NotEmpty object received: " + event.data.notEmpty.byteLength); |
|
42 } |
|
43 |
|
44 if (!event.data.last) |
|
45 return; |
|
46 |
|
47 test1(sizes); |
|
48 } |
|
49 worker.onerror = function(event) { |
|
50 ok(false, "No errors!"); |
|
51 } |
|
52 |
|
53 try { |
|
54 worker.postMessage(42, true); |
|
55 ok(false, "P: PostMessage - Exception for wrong type"); |
|
56 } catch(e) { |
|
57 ok(true, "P: PostMessage - Exception for wrong type"); |
|
58 } |
|
59 |
|
60 try { |
|
61 ab = new ArrayBuffer(size); |
|
62 worker.postMessage(42,[ab, ab]); |
|
63 ok(false, "P: PostMessage - Exception for duplicate"); |
|
64 } catch(e) { |
|
65 ok(true, "P: PostMessage - Exception for duplicate"); |
|
66 } |
|
67 |
|
68 var ab = new ArrayBuffer(size); |
|
69 ok(ab.byteLength == size, "P: The size is: " + size + " == " + ab.byteLength); |
|
70 worker.postMessage({ data: 0, timeout: 0, ab: ab, cb: ab, size: size }, [ab]); |
|
71 ok(ab.byteLength == 0, "P: PostMessage - The size is: 0 == " + ab.byteLength) |
|
72 } |
|
73 |
|
74 function test2() { |
|
75 var worker = new Worker("transferable_worker.js"); |
|
76 worker.onmessage = function(event) { |
|
77 ok(event.data.status, event.data.event); |
|
78 if (!event.data.status) { |
|
79 runTests(); |
|
80 return; |
|
81 } |
|
82 |
|
83 if ("notEmpty" in event.data && "byteLength" in event.data.notEmpty) { |
|
84 ok(event.data.notEmpty.byteLength != 0, |
|
85 "P: NotEmpty object received: " + event.data.notEmpty.byteLength); |
|
86 } |
|
87 |
|
88 if (event.data.last) { |
|
89 runTests(); |
|
90 } |
|
91 } |
|
92 worker.onerror = function(event) { |
|
93 ok(false, "No errors!"); |
|
94 } |
|
95 |
|
96 var f = new Float32Array([0,1,2,3]); |
|
97 ok(f.byteLength != 0, "P: The size is: " + f.byteLength + " is not 0"); |
|
98 worker.postMessage({ event: "P: postMessage with Float32Array", status: true, |
|
99 size: 4, notEmpty: f, bc: [ f, f, { dd: f } ] }, [f.buffer]); |
|
100 ok(f.byteLength == 0, "P: The size is: " + f.byteLength + " is 0"); |
|
101 } |
|
102 |
|
103 var tests = [ |
|
104 function() { test1([1024 * 1024 * 32, 128, 4]); }, |
|
105 test2 |
|
106 ]; |
|
107 function runTests() { |
|
108 if (!tests.length) { |
|
109 SimpleTest.finish(); |
|
110 return; |
|
111 } |
|
112 |
|
113 var test = tests.shift(); |
|
114 test(); |
|
115 } |
|
116 |
|
117 SimpleTest.waitForExplicitFinish(); |
|
118 runTests(); |
|
119 |
|
120 </script> |
|
121 </pre> |
|
122 </body> |
|
123 </html> |