4 <script src=
"/js-test-resources/js-test.js"></script>
7 <div id=
"description"></div>
8 <div id=
"console"></div>
10 description("WebSocket: Receive fragmented binary messages.");
12 window
.jsTestIsAsync
= true;
14 function createHelloWorldValue()
16 var hello
= "Hello, world!";
17 var array
= new Uint8Array(hello
.length
);
18 for (var i
= 0; i
< hello
.length
; ++i
)
19 array
[i
] = hello
.charCodeAt(i
);
23 function createEmptyValue()
25 return new ArrayBuffer(0);
28 // Create an ArrayBuffer containing all distinct bytes ("\x00" to "\xFF").
29 function createAllBytesValue()
31 var array
= new Uint8Array(256);
32 for (var i
= 0; i
< 256; ++i
)
37 var ws
= new WebSocket("ws://127.0.0.1:8880/fragmented-binary-frames");
38 shouldBeEqualToString("ws.binaryType", "blob");
41 var receivedMessages
= [];
42 var expectedValues
= [createHelloWorldValue(), createHelloWorldValue(), createEmptyValue(), createAllBytesValue()];
44 ws
.onmessage = function(event
)
46 receivedMessages
.push(event
.data
);
49 ws
.onclose = function(event
)
53 shouldEvaluateTo("receivedMessages.length", expectedValues
.length
);
61 if (index
== expectedValues
.length
) {
66 debug("Checking message #" + index
+ ".");
67 responseType
= '' + receivedMessages
[index
];
68 shouldBeEqualToString("responseType", "[object Blob]");
69 var reader
= new FileReader();
70 reader
.readAsArrayBuffer(receivedMessages
[index
]);
71 reader
.onload = function(event
)
73 checkArrayBuffer(index
, reader
.result
, expectedValues
[index
]);
76 reader
.onerror = function(event
)
78 testFailed("Failed to read blob: error code = " + reader
.error
.code
);
86 function checkArrayBuffer(testIndex
, actual
, expected
)
88 actualArray
= new Uint8Array(actual
);
89 expectedArray
= new Uint8Array(expected
);
90 shouldEvaluateTo("actualArray.length", expectedArray
.length
);
91 // Print only the first mismatched byte in order not to flood console.
92 for (var i
= 0; i
< expectedArray
.length
; ++i
) {
93 if (actualArray
[i
] != expectedArray
[i
]) {
94 testFailed("Value mismatch: actualArray[" + i
+ "] = " + actualArray
[i
] + ", expectedArray[" + i
+ "] = " + expectedArray
[i
]);
98 testPassed("Passed: Message #" + testIndex
+ ".");