'use strict'; var should = require('should'); var Message = require('../../source/message'); var callbacks = { fn: function () {}, register: function () { return 0; }, getFn: function () { return callbacks.fn; } }; describe('Message', function () { describe(':constructor', function () { }); describe(':toString', function () { var message; before(function () { message = new Message(callbacks); }); it('should serialize messages', function () { var string = message.serialize('test', 'one', 'two', 'three'); string.should.equal('test("one","two","three")'); string = message.serialize('test', 'one', function () {}); string.should.equal('test("one").fn(0)'); string = message.serialize( 'something.amazing', ['woo', 'loo'], {oh: 'yeah'}, function () {} ); string.should.equal('something.amazing(["woo","loo"],{"oh":"yeah"}).fn(0)'); }); }); describe(':parse', function () { var message; before(function () { message = new Message(callbacks); }); it('should parse messages', function () { var string = 'socket.test("one","two","three")'; message.parse(string).should.eql({ event: 'socket.test', arg1: 'one', arg2: 'two', arg3: 'three' }); string = 'test("one","two")'; message.parse(string).should.eql({ event: 'test', arg1: 'one', arg2: 'two', arg3: undefined }); string = 'test().fn(0)'; message.parse(string).should.eql({ event: 'test', arg1: callbacks.fn, arg2: undefined, arg3: undefined }); string = 'test("arg1").fn(0)'; message.parse(string).should.eql({ event: 'test', arg1: 'arg1', arg2: callbacks.fn, arg3: undefined }); }); it('should handle invalid messages', function () { var string = 'socket.test(one,two,three)'; message.parse(string).should.equal(false); string = 'foo bar'; message.parse(string).should.equal(false); string = 'not.a.message'; message.parse(string).should.equal(false); string = 'what_could ({happen:20}).fn( 2 )'; message.parse(string).should.equal(false); string = '()'; message.parse(string).should.equal(false); string = 2; message.parse(string).should.equal(false); string = undefined; message.parse(string).should.equal(false); }); }); });