mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 21:51:23 +00:00
GUACAMOLE-1204: Add generic, listener-driven event system.
This commit is contained in:
139
guacamole-common-js/src/test/javascript/EventSpec.js
Normal file
139
guacamole-common-js/src/test/javascript/EventSpec.js
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* 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);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user