tizen beta release
[framework/web/webkit-efl.git] / LayoutTests / http / tests / websocket / tests / hybi / bufferedAmount-after-close.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../../../js-test-resources/js-test-pre.js"></script>
5 </head>
6 <body>
7 <div id="description"></div>
8 <div id="console"></div>
9 <script type="text/javascript">
10 description("Web Socket bufferedAmount after closed");
11
12 window.jsTestIsAsync = true;
13 if (window.layoutTestController)
14     layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
15
16 function createStringWithLength(length)
17 {
18     var string = 'x';
19     while (string.length < length)
20         string = string + string;
21     return string.substring(0, length);
22 }
23
24 function createBlobWithLength(length)
25 {
26     var builder = new WebKitBlobBuilder();
27     builder.append(new ArrayBuffer(length));
28     return builder.getBlob();
29 }
30
31 var ws = new WebSocket("ws://localhost:8880/websocket/tests/hybi/simple");
32
33 ws.onopen = function()
34 {
35     debug("Connected.");
36     ws.close();
37 };
38
39 ws.onclose = function()
40 {
41     debug("Closed.");
42     shouldBe("ws.readyState", "3");
43     shouldBe("ws.bufferedAmount", "0");
44
45     var baseOverhead = 2 + 4; // Base header size and masking key size.
46     debug("Testing send(string)...");
47     testBufferedAmount('send to closed socket', 21 + baseOverhead);
48     testBufferedAmount('', baseOverhead);
49     testBufferedAmount('a', 1 + baseOverhead);
50     testBufferedAmount(createStringWithLength(125), 125 + baseOverhead);
51     testBufferedAmount(createStringWithLength(126), 126 + baseOverhead + 2); // With 16-bit extended payload length field.
52     testBufferedAmount(createStringWithLength(0xFFFF), 0xFFFF + baseOverhead + 2);
53     testBufferedAmount(createStringWithLength(0x10000), 0x10000 + baseOverhead + 8); // With 64-bit extended payload length field.
54
55     debug("Testing send(ArrayBuffer)...");
56     testBufferedAmount(new ArrayBuffer(0), baseOverhead);
57     testBufferedAmount(new ArrayBuffer(1), 1 + baseOverhead);
58     testBufferedAmount(new ArrayBuffer(125), 125 + baseOverhead);
59     testBufferedAmount(new ArrayBuffer(126), 126 + baseOverhead + 2);
60     testBufferedAmount(new ArrayBuffer(0xFFFF), 0xFFFF + baseOverhead + 2);
61     testBufferedAmount(new ArrayBuffer(0x10000), 0x10000 + baseOverhead + 8);
62
63     debug("Testing send(Blob)...");
64     testBufferedAmount(createBlobWithLength(0), baseOverhead);
65     testBufferedAmount(createBlobWithLength(1), 1 + baseOverhead);
66     testBufferedAmount(createBlobWithLength(125), 125 + baseOverhead);
67     testBufferedAmount(createBlobWithLength(126), 126 + baseOverhead + 2);
68     testBufferedAmount(createBlobWithLength(0xFFFF), 0xFFFF + baseOverhead + 2);
69     testBufferedAmount(createBlobWithLength(0x10000), 0x10000 + baseOverhead + 8);
70
71     finishJSTest();
72 };
73
74 var messageToSend;
75 var bufferedAmountDifference;
76
77 function testBufferedAmount(message, expectedBufferedAmountDifference)
78 {
79     // If the connection is closed, bufferedAmount attribute's value will only
80     // increase with each call to the send() method.
81     // (the number does not reset to zero once the connection closes).
82     messageToSend = message;
83     var bufferedAmountBeforeSend = ws.bufferedAmount;
84     shouldBeFalse("ws.send(messageToSend)");
85     var bufferedAmountAfterSend = ws.bufferedAmount;
86     bufferedAmountDifference = bufferedAmountAfterSend - bufferedAmountBeforeSend;
87     shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference);
88 }
89
90 </script>
91 <script src="../../../../js-test-resources/js-test-post.js"></script>
92 </body>
93 </html>