| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /* global Guacamole, jasmine, expect */ |
| |
| describe("Guacamole.Event", function EventSpec() { |
| |
| /** |
| * Test subclass of {@link Guacamole.Event} which provides a single |
| * "value" property supports an "ontest" legacy event handler. |
| * |
| * @constructor |
| * @augments Guacamole.Event |
| */ |
| var TestEvent = function TestEvent(value) { |
| |
| Guacamole.Event.apply(this, [ 'test' ]); |
| |
| /** |
| * An arbitrary value to expose to the handler of this event. |
| * |
| * @type {Object} |
| */ |
| this.value = value; |
| |
| /** |
| * @inheritdoc |
| */ |
| this.invokeLegacyHandler = function invokeLegacyHandler(target) { |
| if (target.ontest) |
| target.ontest(value); |
| }; |
| |
| }; |
| |
| /** |
| * Event target instance which will receive each fired {@link TestEvent}. |
| * |
| * @type {Guacamole.Event.Target} |
| */ |
| var eventTarget; |
| |
| beforeEach(function() { |
| eventTarget = new Guacamole.Event.Target(); |
| }); |
| |
| describe("when an event is dispatched", function(){ |
| |
| it("should invoke the legacy handler for matching events", function() { |
| |
| eventTarget.ontest = jasmine.createSpy('ontest'); |
| eventTarget.dispatch(new TestEvent('event1')); |
| expect(eventTarget.ontest).toHaveBeenCalledWith('event1'); |
| |
| }); |
| |
| it("should invoke all listeners for matching events", function() { |
| |
| var listener1 = jasmine.createSpy('listener1'); |
| var listener2 = jasmine.createSpy('listener2'); |
| |
| eventTarget.on('test', listener1); |
| eventTarget.on('test', listener2); |
| |
| eventTarget.dispatch(new TestEvent('event2')); |
| |
| expect(listener1).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event2' }), eventTarget); |
| expect(listener2).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event2' }), eventTarget); |
| |
| }); |
| |
| it("should not invoke any listeners for non-matching events", function() { |
| |
| var listener1 = jasmine.createSpy('listener1'); |
| var listener2 = jasmine.createSpy('listener2'); |
| |
| eventTarget.on('test2', listener1); |
| eventTarget.on('test2', listener2); |
| |
| eventTarget.dispatch(new TestEvent('event3')); |
| |
| expect(listener1).not.toHaveBeenCalled(); |
| expect(listener2).not.toHaveBeenCalled(); |
| |
| }); |
| |
| it("should not invoke any listeners that have been removed", function() { |
| |
| var listener1 = jasmine.createSpy('listener1'); |
| var listener2 = jasmine.createSpy('listener2'); |
| |
| eventTarget.on('test', listener1); |
| eventTarget.on('test', listener2); |
| eventTarget.off('test', listener1); |
| |
| eventTarget.dispatch(new TestEvent('event4')); |
| |
| expect(listener1).not.toHaveBeenCalled(); |
| expect(listener2).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event4' }), eventTarget); |
| |
| }); |
| |
| }); |
| |
| describe("when listeners are removed", function(){ |
| |
| it("should return whether a listener is successfully removed", function() { |
| |
| var listener1 = jasmine.createSpy('listener1'); |
| var listener2 = jasmine.createSpy('listener2'); |
| |
| eventTarget.on('test', listener1); |
| eventTarget.on('test', listener2); |
| |
| expect(eventTarget.off('test', listener1)).toBe(true); |
| expect(eventTarget.off('test', listener1)).toBe(false); |
| expect(eventTarget.off('test', listener2)).toBe(true); |
| expect(eventTarget.off('test', listener2)).toBe(false); |
| |
| }); |
| |
| }); |
| }); |