UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

288 lines (241 loc) 8.33 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Christian Hagendorn (chris_schmidt) ************************************************************************ */ qx.Class.define("qx.test.event.message.Bus", { extend: qx.dev.unit.TestCase, members: { __subscriberOne: null, __subscriberTwo: null, __subscriberThree: null, setUp() { this.__subscriberOne = new qx.core.Object(); this.__subscriberTwo = new qx.core.Object(); this.__subscriberThree = new qx.core.Object(); }, tearDown() { this.__subscriberOne.dispose(); this.__subscriberTwo.dispose(); this.__subscriberThree.dispose(); var subscribers = qx.event.message.Bus.getSubscriptions(); for (var key in subscribers) { delete subscribers[key]; } this.assertJsonEquals({}, qx.event.message.Bus.getSubscriptions()); }, testDispatch() { var bus = qx.event.message.Bus; var calls = 0; var that = this; bus.subscribe( "*", function (message) { calls++; that.assertEquals("MyMessage", message.getName()); that.assertEquals(10, message.getData()); }, this.__subscriberOne ); bus.subscribe( "MyMessage2", function (message) { that.assertFalse(true, "Wrong subscriber called!"); }, this.__subscriberTwo ); bus.subscribe( "MyMessage", function (message) { calls++; that.assertEquals("MyMessage", message.getName()); that.assertEquals(10, message.getData()); }, this.__subscriberThree ); var msg = new qx.event.message.Message("MyMessage", 10); this.assertTrue(bus.dispatch(msg), "Message not dispatched"); this.assertEquals(2, calls, "Wrong callbacks!"); msg.dispose(); }, testDispatchWithDisposed() { var bus = qx.event.message.Bus; var calls = 0; var that = this; bus.subscribe( "*", function (message) { calls++; that.assertEquals("MyMessage", message.getName()); that.assertEquals(10, message.getData()); }, this.__subscriberOne ); this.__subscriberTwo.dispose(); bus.subscribe( "MyMessage", function (message) { that.assertFalse(true, "Wrong subscriber called!"); }, this.__subscriberTwo ); bus.subscribe( "MyMessage", function (message) { calls++; that.assertEquals("MyMessage", message.getName()); that.assertEquals(10, message.getData()); }, this.__subscriberThree ); var msg = new qx.event.message.Message("MyMessage", 10); this.assertTrue(bus.dispatch(msg), "Message not dispatched"); this.assertEquals(2, calls, "Wrong callbacks!"); msg.dispose(); }, // see http://bugzilla.qooxdoo.org/show_bug.cgi?id=2996 testWildcard() { var flag1 = false; var flag2 = false; function handler1() { flag1 = true; } function handler2() { flag2 = true; } var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribe("*", handler1, this); messageBus.subscribe("mess*", handler2, this); var msg1 = new qx.event.message.Message("message", true); this.assertTrue(messageBus.dispatch(msg1), "Message not dispatched"); this.assertTrue( flag1, "Handler1 (filter '*') was not called for message 'message'." ); this.assertTrue( flag2, "Handler2 (filter 'mess*') was not called for message 'message'." ); flag1 = false; flag2 = false; var msg2 = new qx.event.message.Message("massage", true); this.assertTrue(messageBus.dispatch(msg2), "Message not dispatched"); this.assertTrue( flag1, "Handler1 (filter '*') was not called for message 'massage'." ); this.assertFalse( flag2, "Handler2 (filter 'mess*') was wrongly called for message 'massage'." ); msg1.dispose(); msg2.dispose(); }, testRegex() { var flag1 = false; function handler1() { flag1 = true; } var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribe(/^test\.[a-z]+$/, handler1, this); var msg1 = new qx.event.message.Message("test.abc", true); this.assertTrue(messageBus.dispatch(msg1), "Message not dispatched"); this.assertTrue( flag1, "Handler1 (filter /^test\\.[a-z]+$/) was not called for message '" + msg1.getName() + "'" ); var msg2 = new qx.event.message.Message("test.123", true); this.assertFalse( messageBus.dispatch(msg2), "Message was dispatched and shouldn't have been" ); msg1.dispose(); msg2.dispose(); }, testSubscribeOnce() { var flag1 = false; function handler1() { flag1 = true; } var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribeOnce("testSubscribeOnce", handler1, this); var msg1 = new qx.event.message.Message("testSubscribeOnce", true); this.assertTrue(messageBus.dispatch(msg1), "Message not dispatched"); this.assertTrue( flag1, 'Handler (filter "testSubscribeOnce") was not called for message \'' + msg1.getName() + "'" ); flag1 = false; var msg2 = new qx.event.message.Message("testSubscribeOnce", true); this.assertFalse( messageBus.dispatch(msg2), "Message was dispatched but shouldn't have been." ); msg1.dispose(); msg2.dispose(); }, // see http://bugzilla.qooxdoo.org/show_bug.cgi?id=2996 testUnsubscribe() { var flag = false; function handler() { flag = true; } function anotherHandler() {} var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribe("message", handler, this); messageBus.unsubscribe("message", anotherHandler, this); var msg1 = new qx.event.message.Message("message", true); this.assertTrue(messageBus.dispatch(msg1), "Message not dispatched"); this.assertTrue(flag, "Handler was not called."); flag = false; messageBus.unsubscribe("message", handler, this); var msg2 = new qx.event.message.Message("message", true); this.assertFalse(messageBus.dispatch(msg2), "Message not dispatched"); this.assertFalse(flag, "Handler was called although unsubscribed."); msg1.dispose(); msg2.dispose(); }, testUnsubscribeAll() { var flag = false; function handler() { flag = true; } function anotherHandler() {} var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribe("message", handler, this); var msg1 = new qx.event.message.Message("message", true); this.assertTrue(messageBus.dispatch(msg1), "Message not dispatched"); this.assertTrue(flag, "Handler was not called."); flag = false; messageBus.unsubscribe("message"); var msg2 = new qx.event.message.Message("message", true); this.assertFalse(messageBus.dispatch(msg2), "Message not dispatched"); this.assertFalse(flag, "Handler was called although unsubscribed."); msg1.dispose(); msg2.dispose(); }, testWrongDispatch() { var flag = false; function handler() { flag = true; } var messageBus = qx.event.message.Bus.getInstance(); messageBus.subscribe("message", handler, this); messageBus.subscribe("massage", handler, this); var msg = new qx.event.message.Message("trash", true); this.assertFalse(messageBus.dispatch(msg), "Message was dispatched"); this.assertFalse(flag, "Handler was called."); msg.dispose(); } } });