UNPKG

raptor

Version:

RaptorJS provides an AMD module loader that works in Node, Rhino and the web browser. It also includes various sub-modules to support building optimized web applications.

167 lines (119 loc) 5.42 kB
require('./_helper.js'); var raptor = require('raptor'); var define = raptor.createDefine(module); describe('pubsub module', function() { it('should allow basic pub sub on the global channel', function() { var pubsub = require('raptor/pubsub'); var receivedMessage = null; var receivedData = null; var receivedTopic = false; var thisObj = {}; pubsub.subscribe('some.topic', function(data, message) { expect(this).toStrictlyEqual(thisObj); receivedData = data; receivedMessage = message; }, thisObj); pubsub.publish('some.topic', {test: "Hello World!"}); expect(receivedMessage).toNotEqual(null); expect(receivedData).toNotEqual(null); expect(receivedData.test).toEqual('Hello World!'); expect(receivedMessage.getTopic()).toEqual('some.topic'); }); it('should allow basic pub sub on the named channels', function() { var pubsub = require('raptor/pubsub'); var channel1 = pubsub.channel('channel1'); var channel2 = pubsub.channel('channel2'); var received1, received2; var thisObj = {}; channel1.subscribe('some.topic', function(message) { expect(this).toStrictlyEqual(thisObj); received1 = message; }, thisObj); channel2.subscribe('some.topic', function(message) { expect(this).toStrictlyEqual(thisObj); received2 = message; }, thisObj); channel1.publish('some.topic', {one: "one"}); expect(received1.one).toEqual('one'); expect(received2).toEqual(undefined); channel2.publish('some.topic', {two: "two"}); expect(received1.one).toEqual('one'); expect(received2.two).toEqual('two'); }); it('should allow basic pub sub with topic wild-cards', function() { var pubsub = require('raptor/pubsub'); var channel = pubsub.channel('channel1'); var received1Messages = [], received2Messages = [], received3Messages = []; channel.subscribe('a.*', function(message) { received1Messages.push(message); }); channel.subscribe('*', function(message) { received2Messages.push(message); }); channel.subscribe('a.a', function(message) { received3Messages.push(message); }); channel.publish('a', {value: "a"}); channel.publish('a.a', {value: "a.a"}); channel.publish('a.b', {value: "a.b"}); channel.publish('a.b.c', {value: "a.b.c"}); expect(received1Messages.length).toEqual(2); expect(received2Messages.length).toEqual(4); expect(received3Messages.length).toEqual(1); expect(received1Messages[0].value).toEqual('a.a'); expect(received1Messages[1].value).toEqual('a.b'); expect(received2Messages[0].value).toEqual('a'); expect(received2Messages[1].value).toEqual('a.a'); expect(received2Messages[2].value).toEqual('a.b'); expect(received2Messages[3].value).toEqual('a.b.c'); expect(received3Messages[0].value).toEqual('a.a'); }); it('should allow unsubscribe', function() { var pubsub = require('raptor/pubsub'); var channel = pubsub.channel('test'); var messages = []; var handle = channel.subscribe('hello', function(message) { messages.push(message); }); channel.publish('hello', {one: 'one'}); handle.unsubscribe(); channel.publish('hello', {two: 'two'}); expect(messages.length).toEqual(1); expect(messages[0].one).toEqual('one'); }); it('should allow the message object to be accessed after the normal arguments', function() { var pubsub = require('raptor/pubsub'); var listeners = require('raptor/listeners'); var channel = pubsub.channel('messageObjectTest'); var receivedHello, receivedWorld, receivedMessage; channel.subscribe('test', function(data, message) { expect(data.hello).toEqual("Hello"); expect(data.world).toEqual("World"); receivedMessage = message; }); var sentMessage = channel.publish('test', {hello: "Hello", world: "World"}); expect(receivedMessage).toEqual(sentMessage); expect(receivedMessage.getTopic()).toEqual("test"); expect(receivedMessage.getName()).toEqual("test"); expect(listeners.isMessage(receivedMessage)).toEqual(true); }); // it('should allow data provided by a subscriber to be passed to a callback function', function() { // var pubsub = require('raptor/pubsub'); // // // var channel = pubsub.channel('subscriberData'); // // channel.subscribe('test', function() { // // }, this, {sourceTest: "Hello"}); // // channel.publish('test', "World"); // // // }); });