var Draft75 = require("../../../lib/websocket/driver/draft75"), test = require('jstest').Test test.describe("Draft75", function() { with(this) { define("request", function() { return this._request = this._request || { method: "GET", headers: { "connection": "Upgrade", "upgrade": "WebSocket", "origin": "http://www.example.com" } } }) define("options", function() { return this._options = this._options || { masking: false } }) define("driver", function() { if (this._driver) return this._driver this._driver = new Draft75(this.request(), "ws://www.example.com/socket", this.options()) var self = this this._driver.on('open', function(e) { self.open = true }) this._driver.on('message', function(e) { self.message += e.data }) this._driver.on('close', function(e) { self.close = true }) this._driver.io.pipe(this.collector()) return this._driver }) before(function() { this.open = this.close = false this.message = "" }) describe("in the connecting state", function() { with(this) { it("starts in the connecting state", function() { with(this) { assertEqual( "connecting", driver().getState() ) }}) describe("start", function() { with(this) { it("writes the handshake response to the socket", function() { with(this) { expect(driver().io, "emit").given("data", buffer( "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "WebSocket-Origin: http://www.example.com\r\n" + "WebSocket-Location: ws://www.example.com/socket\r\n" + "\r\n")) driver().start() }}) it("returns true", function() { with(this) { assertEqual( true, driver().start() ) }}) it("triggers the onopen event", function() { with(this) { driver().start() assertEqual( true, open ) }}) it("changes the state to open", function() { with(this) { driver().start() assertEqual( "open", driver().getState() ) }}) it("sets the protocol version", function() { with(this) { driver().start() assertEqual( "hixie-75", driver().version ) }}) }}) describe("frame", function() { with(this) { it("does not write to the socket", function() { with(this) { expect(driver().io, "emit").exactly(0) driver().frame("Hello, world") }}) it("returns true", function() { with(this) { assertEqual( true, driver().frame("whatever") ) }}) it("queues the frames until the handshake has been sent", function() { with(this) { expect(driver().io, "emit").given("data", buffer( "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "WebSocket-Origin: http://www.example.com\r\n" + "WebSocket-Location: ws://www.example.com/socket\r\n" + "\r\n")) expect(driver().io, "emit").given("data", buffer([0x00, 0x48, 0x69, 0xff])) driver().frame("Hi") driver().start() }}) }}) }}) itShouldBehaveLike("draft-75 protocol") }})