<!DOCTYPE html> <html> <head> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script class="testbody" type="text/javascript"> function debug(msg) { ok(true, msg); } function createArrayBufferContainingHelloWorld() { var hello = "Hello, world!"; var array = new Uint8Array(hello.length); for (var i = 0; i < hello.length; ++i) array[i] = hello.charCodeAt(i); return array.buffer; } function createEmptyArrayBuffer() { return new ArrayBuffer(0); } function createArrayBufferContainingAllDistinctBytes() { var array = new Uint8Array(256); for (var i = 0; i < 256; ++i) array[i] = i; return array.buffer; } var ws = new WebSocket("ws://mochi.test:8888/tests/dom/base/test/websocket_hybi/file_binary-frames"); is(ws.binaryType, "blob", "should be 'blob'"); var closeEvent; var receivedMessages = []; var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()]; ws.onmessage = function(event) { receivedMessages.push(event.data); }; ws.onclose = function(event) { closeEvent = event; is(receivedMessages.length, expectedValues.length, "lengths not same"); check(0); }; var responseType; function check(index) { if (index == expectedValues.length) { SimpleTest.finish(); return; } debug("Checking message #" + index + "."); ok(receivedMessages[index] instanceof Blob, "We should be receiving a Blob"); var reader = new FileReader(); reader.readAsArrayBuffer(receivedMessages[index]); reader.onload = function(event) { checkArrayBuffer(index, reader.result, expectedValues[index]); check(index + 1); }; reader.onerror = function(event) { ok(false, "Failed to read blob: error code = " + reader.error.code); check(index + 1); }; } var actualArray; var expectedArray; function checkArrayBuffer(testIndex, actual, expected) { actualArray = new Uint8Array(actual); expectedArray = new Uint8Array(expected); is(actualArray.length, expectedArray.length, "lengths not same"); // Print only the first mismatched byte in order not to flood console. for (var i = 0; i < expectedArray.length; ++i) { if (actualArray[i] != expectedArray[i]) { ok(false, "Value mismatch: actualArray[" + i + "] = " + actualArray[i] + ", expectedArray[" + i + "] = " + expectedArray[i]); return; } } ok(true, "Passed: Message #" + testIndex + "."); } SimpleTest.waitForExplicitFinish(); </script> </body> </html>