# HG changeset patch # User Olli Pettay # Date 1276849755 -10800 # Node ID dd77b1f189c89f62df4c8ee160dcaf7e773f1b32 # Parent bdce66d818cbf825246751487493180f50c55efd Bug 562681, still few more tests diff --git a/content/base/test/test_ws_basic_tests.html b/content/base/test/test_ws_basic_tests.html --- a/content/base/test/test_ws_basic_tests.html +++ b/content/base/test/test_ws_basic_tests.html @@ -21,6 +21,14 @@ var params = ["protocol", "resource", "origin", "end"]; var results = ["test", "/tests/content/base/test/file_ws_basic_tests", "http://mochi.test:8888", "end"]; +function forcegc(){ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + Components.utils.forceGC(); + var wu = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIDOMWindowUtils); + wu.garbageCollect(); +} + function testWebSocket () { ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_ws_basic_tests", "test"); ws.onopen = function(e) { @@ -75,24 +83,78 @@ function testWebSocket3() { ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_ws_basic_tests", "test"); - var longString = new Array(10000).join("-huge websocket message"); + var testCount = 100; // Send lots of messages + var messageCount = 0; + var testMessage = "test message"; ws.onopen = function(e) { - ws.send(longString); + for (var i = 0; i < testCount; ++i) { + forcegc(); // Do something evil, call cycle collector a lot. + ws.send(testMessage + (i + 1)); + } + ws.send("end"); } ws.onclose = function(e) { - SimpleTest.finish(); + is(messageCount, testCount, "Didn't receive all the messages!"); + testWebSocket4(); } ws.onerror = function(e) { ok(false, "onerror called!"); SimpleTest.finish(); } ws.onmessage = function(e) { + forcegc(); // Do something evil, call cycle collector a lot. + ++messageCount; + is(e.data, testMessage + messageCount, "Wrong message"); + document.getElementById('log').textContent = messageCount; + if (messageCount == testCount) { + this.onmessage = null; + } + } +} + +function testWebSocket4() { + ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_ws_basic_tests", "test"); + var longString = new Array(10000).join("-huge websocket message"); + ws.onopen = function(e) { + is(this, ws, "'this' should point to the WebSocket. (1)"); + ws.send(longString); + } + ws.onclose = function(e) { + is(this, ws, "'this' should point to the WebSocket. (2)"); + ok(e.wasClean, "Connection should have closed cleanly."); + testWebSocket5(); + } + ws.onerror = function(e) { + ok(false, "onerror called!"); + SimpleTest.finish(); + } + ws.onmessage = function(e) { + is(this, ws, "'this' should point to the WebSocket. (3)"); is(e.data, longString, "Didn't get the huge message back!"); document.getElementById('log').textContent += "\nReceived the huge message"; this.close(); } } +function testWebSocket5() { + ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_ws_basic_tests", "test"); + ws.onopen = function(e) { + this.close(); + } + ws.onclose = function(e) { + ok(e.wasClean, "Connection should have closed cleanly."); + is(this.bufferedAmount, 0, "Shouldn't have anything buffered"); + var msg = "some data"; + this.send(msg); + ok(this.bufferedAmount, msg.length, "Should have some data buffered"); + SimpleTest.finish(); + } + ws.onerror = function(e) { + ok(false, "onerror called!"); + SimpleTest.finish(); + } +} + SimpleTest.waitForExplicitFinish();