var assert = require('assert') , expect = require('expect.js') , Receiver = require('../lib/Receiver.hixie'); require('./hybi-common'); describe('Receiver', function() { it('can parse text message', function() { var p = new Receiver(); var packet = '00 48 65 6c 6c 6f ff'; var gotData = false; p.ontext = function(data) { gotData = true; assert.equal('Hello', data); }; p.add(getBufferFromHexString(packet)); expect(gotData).to.equal(true); }); it('can parse multiple text messages', function() { var p = new Receiver(); var packet = '00 48 65 6c 6c 6f ff 00 48 65 6c 6c 6f ff'; var gotData = false; var messages = []; p.ontext = function(data) { gotData = true; messages.push(data); }; p.add(getBufferFromHexString(packet)); expect(gotData).to.equal(true); for (var i = 0; i < 2; ++i) { expect(messages[i]).to.equal('Hello'); } }); it('can parse empty message', function() { var p = new Receiver(); var packet = '00 ff'; var gotData = false; p.ontext = function(data) { gotData = true; assert.equal('', data); }; p.add(getBufferFromHexString(packet)); expect(gotData).to.equal(true); }); it('can parse text messages delivered over multiple frames', function() { var p = new Receiver(); var packets = [ '00 48', '65 6c 6c', '6f ff 00 48', '65', '6c 6c 6f', 'ff' ]; var gotData = false; var messages = []; p.ontext = function(data) { gotData = true; messages.push(data); }; for (var i = 0; i < packets.length; ++i) { p.add(getBufferFromHexString(packets[i])); } expect(gotData).to.equal(true); for (var i = 0; i < 2; ++i) { expect(messages[i]).to.equal('Hello'); } }); it('emits an error if a payload doesnt start with 0x00', function() { var p = new Receiver(); var packets = [ '00 6c ff', '00 6c ff ff', 'ff 00 6c ff 00 6c ff', '00', '6c 6c 6f', 'ff' ]; var gotData = false; var gotError = false; var messages = []; p.ontext = function(data) { gotData = true; messages.push(data); }; p.onerror = function(reason, code) { gotError = code == true; }; for (var i = 0; i < packets.length && !gotError; ++i) { p.add(getBufferFromHexString(packets[i])); } expect(gotError).to.equal(true); expect(messages[0]).to.equal('l'); expect(messages[1]).to.equal('l'); expect(messages.length).to.equal(2); }); it('can parse close messages', function() { var p = new Receiver(); var packets = [ 'ff 00' ]; var gotClose = false; var gotError = false; p.onclose = function() { gotClose = true; }; p.onerror = function(reason, code) { gotError = code == true; }; for (var i = 0; i < packets.length && !gotError; ++i) { p.add(getBufferFromHexString(packets[i])); } expect(gotClose).to.equal(true); expect(gotError).to.equal(false); }); it('can parse binary messages delivered over multiple frames', function() { var p = new Receiver(); var packets = [ '80 05 48', '65 6c 6c', '6f 80 80 05 48', '65', '6c 6c 6f' ]; var gotData = false; var messages = []; p.ontext = function(data) { gotData = true; messages.push(data); }; for (var i = 0; i < packets.length; ++i) { p.add(getBufferFromHexString(packets[i])); } expect(gotData).to.equal(true); for (var i = 0; i < 2; ++i) { expect(messages[i]).to.equal('Hello'); } }); });