UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

184 lines (130 loc) 4.72 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 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: * Fabian Jakobs (fjakobs) ************************************************************************ */ /** * @ignore(Foo) */ qx.Class.define("qx.test.event.Registration", { extend : qx.dev.unit.TestCase, events : { "$test" : "qx.event.type.Event" }, members : { testAddRemoveListener : function() { var target = this; var type = "$test"; var capture = false; var Reg = qx.event.Registration; var mgr = Reg.getManager(target); var handler = mgr.findHandler(target, type); this.assertInstance(handler, qx.test.event.MockHandler); var fired = [false, false]; var listener1 = function(e) { fired[0] = true; }; var listener2 = function(e) { fired[1] = true; }; // first add with this type/target handler.calls = []; Reg.addListener(target, type, listener1, this, capture); this.assertEquals(1, handler.calls.length); this.assertArrayEquals(["registerEvent", target, type, capture], handler.calls[0]); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([true, false], fired); // second add with this type/target handler.calls = []; fired = [false, false]; Reg.addListener(target, type, listener2, this, capture); this.assertEquals(0, handler.calls.length); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([true, true], fired); // remove first handler handler.calls = []; fired = [false, false]; Reg.removeListener(target, type, listener1, this, capture); this.assertEquals(0, handler.calls.length); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([false, true], fired); // remove second handler handler.calls = []; fired = [false, false]; Reg.removeListener(target, type, listener2, this, capture); this.assertEquals(1, handler.calls.length); this.assertArrayEquals(["unregisterEvent", target, type, capture], handler.calls[0]); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([false, false], fired); }, testAddRemoveListenerById : function() { var target = this; var type = "$test"; var capture = false; var Reg = qx.event.Registration; var mgr = Reg.getManager(target); var handler = mgr.findHandler(target, type); var fired = [false, false]; var listener1 = function(e) { fired[0] = true; }; var listener2 = function(e) { fired[1] = true; }; var id1 = Reg.addListener(target, type, listener1, this, capture); this.assertNotNull(id1); var id2 = Reg.addListener(target, type, listener2, this, capture); this.assertNotNull(id2); // remove first handler handler.calls = []; fired = [false, false]; Reg.removeListenerById(target, id1); this.assertEquals(0, handler.calls.length); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([false, true], fired); // remove second handler handler.calls = []; fired = [false, false]; Reg.removeListenerById(target, id2); this.assertEquals(1, handler.calls.length); this.assertArrayEquals(["unregisterEvent", target, type, capture], handler.calls[0]); Reg.fireEvent(target, type, qx.event.type.Event, []); this.assertArrayEquals([false, false], fired); }, /** * @ignore(Foo) */ "test addListenerOnce: same callback": function() { qx.Class.define("Foo", { extend: qx.core.Object, events: { "bar": "qx.event.type.Event" }, members: { fireBar: function() { this.fireDataEvent("bar"); } } }); var f1 = new Foo(); var f2 = new Foo(); var called = {}; called[f1.$$hash] = 0; called[f2.$$hash] = 0; var callback = function(e) { called[this.$$hash]++; }; f1.addListenerOnce("bar", callback, f1); f2.addListenerOnce("bar", callback, f2); f1.fireBar(); f2.fireBar(); f1.fireBar(); f2.fireBar(); this.assertEquals(1, called[f1.$$hash]); this.assertEquals(1, called[f2.$$hash]); } } });