d3c52e8e29
Fixes #108
103 lines
3.2 KiB
JavaScript
103 lines
3.2 KiB
JavaScript
describe('EventBus', function() {
|
|
beforeEach(function() {
|
|
var event = this.event = jasmine.createSpyObj('event', [
|
|
'preventDefault',
|
|
'stopPropagation',
|
|
'stopImmediatePropagation'
|
|
]);
|
|
|
|
var progressEvent = this.progressEvent = jasmine.createSpyObj('progressEvent', [
|
|
'preventDefault',
|
|
'stopPropagation',
|
|
'stopImmediatePropagation'
|
|
]);
|
|
|
|
var eventFactory = this.eventFactory = {
|
|
event: jasmine.createSpy('event').and.returnValue(event),
|
|
progressEvent: jasmine.createSpy('progressEvent').and.returnValue(progressEvent)
|
|
};
|
|
|
|
this.xhr = jasmine.createSpy('xhr');
|
|
this.bus = getJasmineRequireObj().AjaxEventBus(eventFactory)(this.xhr);
|
|
});
|
|
|
|
it('calls an event listener with event object', function() {
|
|
var callback = jasmine.createSpy('callback');
|
|
|
|
this.bus.addEventListener('foo', callback);
|
|
this.bus.trigger('foo');
|
|
|
|
expect(callback).toHaveBeenCalledWith(this.progressEvent);
|
|
expect(this.eventFactory.progressEvent).toHaveBeenCalledWith(this.xhr, 'foo');
|
|
expect(this.eventFactory.event).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('calls an readystatechange listener with event object', function() {
|
|
var callback = jasmine.createSpy('callback');
|
|
|
|
this.bus.addEventListener('readystatechange', callback);
|
|
this.bus.trigger('readystatechange');
|
|
|
|
expect(callback).toHaveBeenCalledWith(this.event);
|
|
expect(this.eventFactory.event).toHaveBeenCalledWith(this.xhr, 'readystatechange');
|
|
expect(this.eventFactory.progressEvent).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('only triggers callbacks for the specified event', function() {
|
|
var fooCallback = jasmine.createSpy('foo'),
|
|
barCallback = jasmine.createSpy('bar');
|
|
|
|
this.bus.addEventListener('foo', fooCallback);
|
|
this.bus.addEventListener('bar', barCallback);
|
|
|
|
this.bus.trigger('foo');
|
|
|
|
expect(fooCallback).toHaveBeenCalled();
|
|
expect(barCallback).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('calls all the callbacks for the specified event', function() {
|
|
var callback1 = jasmine.createSpy('callback');
|
|
var callback2 = jasmine.createSpy('otherCallback');
|
|
|
|
this.bus.addEventListener('foo', callback1);
|
|
this.bus.addEventListener('foo', callback2);
|
|
|
|
this.bus.trigger('foo');
|
|
|
|
expect(callback1).toHaveBeenCalled();
|
|
expect(callback2).toHaveBeenCalled();
|
|
});
|
|
|
|
it('works if there are no callbacks for the event', function() {
|
|
var bus = this.bus;
|
|
expect(function() {
|
|
bus.trigger('notActuallyThere');
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it('does not call listeners that have been removed', function() {
|
|
var callback = jasmine.createSpy('callback');
|
|
|
|
this.bus.addEventListener('foo', callback);
|
|
this.bus.removeEventListener('foo', callback);
|
|
this.bus.trigger('foo');
|
|
|
|
expect(callback).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('only removes the specified callback', function() {
|
|
var callback1 = jasmine.createSpy('callback');
|
|
var callback2 = jasmine.createSpy('otherCallback');
|
|
|
|
this.bus.addEventListener('foo', callback1);
|
|
this.bus.addEventListener('foo', callback2);
|
|
this.bus.removeEventListener('foo', callback2);
|
|
|
|
this.bus.trigger('foo');
|
|
|
|
expect(callback1).toHaveBeenCalled();
|
|
expect(callback2).not.toHaveBeenCalled();
|
|
});
|
|
});
|