test_transferable.html (3207B)
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 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, cb: ab, 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>