<!DOCTYPE html>
<html>
<head>
    <title>W3C WebSocket API - Send null data - WebSocket</title>
    <script type="text/javascript" src="/resources/testharness.js"></script>
    <script type="text/javascript" src="/resources/testharnessreport.js"></script>
    <script type="text/javascript" src="websocket.js?pipe=sub"></script>
</head>
<body>
    <div id="log"></div>
    <script type="text/javascript">

        var testOpen = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be opened");
        var testMessage = async_test("W3C WebSocket API - Send null data on a WebSocket - Message should be received");
        var testClose = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be closed");

        var data = null;
        var nullReturned = false;
        var wsocket = CreateWebSocket(false, false, false);
        var isOpenCalled = false;

        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
            wsocket.send(data);
            isOpenCalled = true;
            testOpen.done();
        }), true);

        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
            if ("null" == evt.data || "" == evt.data)
                nullReturned = true;
            assert_true(nullReturned);
            wsocket.close();
            testMessage.done();
        }), true);

        wsocket.addEventListener('close', testClose.step_func(function (evt) {
            assert_true(isOpenCalled, "WebSocket connection should be open");
            assert_equals(evt.wasClean, true, "wasClean should be true");
            testClose.done();
        }), true);
    </script>
</body>
</html>
