test_receive-blob.html (2745B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="/tests/SimpleTest/SimpleTest.js"></script> 5 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 6 </head> 7 <body> 8 9 <p id="display"></p> 10 <div id="content" style="display: none"> 11 </div> 12 <pre id="test"> 13 14 <script class="testbody" type="text/javascript"> 15 16 function debug(msg) { 17 ok(true, msg); 18 } 19 20 function createArrayBufferContainingHelloWorld() 21 { 22 var hello = "Hello, world!"; 23 var array = new Uint8Array(hello.length); 24 for (var i = 0; i < hello.length; ++i) 25 array[i] = hello.charCodeAt(i); 26 return array.buffer; 27 } 28 29 function createEmptyArrayBuffer() 30 { 31 return new ArrayBuffer(0); 32 } 33 34 function createArrayBufferContainingAllDistinctBytes() 35 { 36 var array = new Uint8Array(256); 37 for (var i = 0; i < 256; ++i) 38 array[i] = i; 39 return array.buffer; 40 } 41 42 var ws = new WebSocket("ws://mochi.test:8888/tests/dom/websocket/tests/websocket_hybi/file_binary-frames"); 43 is(ws.binaryType, "blob", "should be 'blob'"); 44 45 var receivedMessages = []; 46 var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()]; 47 48 ws.onmessage = function(event) 49 { 50 receivedMessages.push(event.data); 51 }; 52 53 ws.onclose = function() 54 { 55 is(receivedMessages.length, expectedValues.length, "lengths not same"); 56 check(0); 57 }; 58 59 var responseType; 60 61 function check(index) 62 { 63 if (index == expectedValues.length) { 64 SimpleTest.finish(); 65 return; 66 } 67 68 debug("Checking message #" + index + "."); 69 ok(receivedMessages[index] instanceof Blob, 70 "We should be receiving a Blob"); 71 var reader = new FileReader(); 72 reader.readAsArrayBuffer(receivedMessages[index]); 73 reader.onload = function() 74 { 75 checkArrayBuffer(index, reader.result, expectedValues[index]); 76 check(index + 1); 77 }; 78 reader.onerror = function() 79 { 80 ok(false, "Failed to read blob: error code = " + reader.error.code); 81 check(index + 1); 82 }; 83 } 84 85 var actualArray; 86 var expectedArray; 87 88 function checkArrayBuffer(testIndex, actual, expected) 89 { 90 actualArray = new Uint8Array(actual); 91 expectedArray = new Uint8Array(expected); 92 is(actualArray.length, expectedArray.length, "lengths not same"); 93 // Print only the first mismatched byte in order not to flood console. 94 for (var i = 0; i < expectedArray.length; ++i) { 95 if (actualArray[i] != expectedArray[i]) { 96 ok(false, "Value mismatch: actualArray[" + i + "] = " + actualArray[i] + ", expectedArray[" + i + "] = " + expectedArray[i]); 97 return; 98 } 99 } 100 ok(true, "Passed: Message #" + testIndex + "."); 101 } 102 103 SimpleTest.waitForExplicitFinish(); 104 105 </script> 106 </body> 107 </html>