diff --git a/test/spec/ol/handler/Click.test.js b/test/spec/ol/handler/Click.test.js index 9b5082c64a..325b0cf24b 100644 --- a/test/spec/ol/handler/Click.test.js +++ b/test/spec/ol/handler/Click.test.js @@ -1,17 +1,47 @@ describe('ol.handler.Click', function() { - var map, elt; + var map, elt, listener; beforeEach(function() { map = new ol.Map(); - elt = goog.dom.createDom('div'); + elt = new goog.events.EventTarget(); + map.viewport_ = elt; + listener = {fn: function() {}}; + spyOn(listener, 'fn'); }); - describe('create a drag handler', function() { + describe('creating a drag handler', function() { it('returns an ol.handler.Click instance', function() { - var handler = new ol.handler.Click(map, elt, {}); + var handler = new ol.handler.Click(map, {}); expect(handler).toBeA(ol.handler.Click); }); - + + }); + + describe('dispatching events', function() { + + it('dispatches a click event which is an ol.events.MapEvent', function() { + new ol.handler.Click(map, {}); + goog.events.listen(map, 'click', listener.fn); + + goog.events.fireListeners(elt, 'click', false, 'foo'); + var evt = listener.fn.calls[0].args[0]; + expect(evt).toBeA(ol.events.MapEvent); + expect(evt.originalEvent).toBe('foo'); + }); + + it('ignores click events when the dragged state is set', function() { + var states = {}; + new ol.handler.Click(map, states); + goog.events.listen(map, 'click', listener.fn); + + goog.events.fireListeners(elt, 'click', false); + expect(listener.fn.calls.length).toBe(1); + + states.dragged = true; + goog.events.fireListeners(elt, 'click', false); + expect(listener.fn.calls.length).toBe(1); + }); + }); }); diff --git a/test/spec/ol/handler/Drag.test.js b/test/spec/ol/handler/Drag.test.js index 3b82a92463..379ea75801 100644 --- a/test/spec/ol/handler/Drag.test.js +++ b/test/spec/ol/handler/Drag.test.js @@ -3,15 +3,71 @@ describe('ol.handler.Drag', function() { beforeEach(function() { map = new ol.Map(); - elt = goog.dom.createDom('div'); + elt = new goog.events.EventTarget(); + map.viewport_ = elt; + listener = {fn: function() {}}; + spyOn(listener, 'fn'); }); - describe('create a drag handler', function() { + describe('creating a drag handler', function() { it('returns an ol.handler.Drag instance', function() { - var handler = new ol.handler.Drag(map, elt, {}); + var handler = new ol.handler.Drag(map, {}); expect(handler).toBeA(ol.handler.Drag); }); }); + + describe('dispatching events', function() { + + it('dragstart, drag and dragend events', function() { + var handler = new ol.handler.Drag(map, {}); + goog.events.listen(map, 'dragstart', listener.fn); + goog.events.listen(map, 'drag', listener.fn); + goog.events.listen(map, 'dragend', listener.fn); + + handler.dragger_.dispatchEvent({type: 'start'}); + handler.dragger_.dispatchEvent({type: 'drag'}); + handler.dragger_.dispatchEvent({type: 'end'}); + + expect(listener.fn.calls[0].args[0].type).toBe('dragstart'); + expect(listener.fn.calls[1].args[0].type).toBe('drag'); + expect(listener.fn.calls[2].args[0].type).toBe('dragend'); + }); + + it('sets the dragged state during a drag sequence', function() { + var states = {}; + var handler = new ol.handler.Drag(map, states); + + handler.dragger_.dispatchEvent({type: 'drag'}); + expect(states.dragged).toBe(true); + + handler.dragger_.dispatchEvent({type: 'start'}); + expect(states.dragged).toBe(false); + }); + + it('sets deltaX and deltaY on the ol.event.MapEvent', function() { + var handler = new ol.handler.Drag(map, {}); + goog.events.listen(map, 'drag', listener.fn); + + handler.dragger_.dispatchEvent({type: 'start', clientX: 2, clientY: 4}); + handler.dragger_.dispatchEvent({type: 'drag', clientX: 1, clientY: 2}); + handler.dragger_.dispatchEvent({type: 'drag', clientX: 2, clientY: 4}); + + expect(listener.fn.calls[0].args[0].deltaX).toBe(-1); + expect(listener.fn.calls[0].args[0].deltaY).toBe(-2); + expect(listener.fn.calls[1].args[0].deltaX).toBe(1); + expect(listener.fn.calls[1].args[0].deltaY).toBe(2); + }); + + it('calls the default action on the default control', function() { + var control = new ol.control.DefaultControl(); + spyOn(control, 'defaultDrag'); + map.setDefaultControl(control); + var handler = new ol.handler.Drag(map, {}); + + handler.dragger_.dispatchEvent({type: 'drag'}); + expect(control.defaultDrag).toHaveBeenCalled(); + }); + }); }); diff --git a/test/spec/ol/handler/MouseWheel.test.js b/test/spec/ol/handler/MouseWheel.test.js index 9baebd9d24..cd029c9401 100644 --- a/test/spec/ol/handler/MouseWheel.test.js +++ b/test/spec/ol/handler/MouseWheel.test.js @@ -3,15 +3,43 @@ describe('ol.handler.MouseWheel', function() { beforeEach(function() { map = new ol.Map(); - elt = goog.dom.createDom('div'); + elt = new goog.events.EventTarget(); + map.viewport_ = elt; + listener = {fn: function() {}}; + spyOn(listener, 'fn'); }); describe('create a mouse wheel handler', function() { it('returns an ol.handler.MouseWheel instance', function() { - var handler = new ol.handler.MouseWheel(map, elt, {}); + var handler = new ol.handler.MouseWheel(map, {}); expect(handler).toBeA(ol.handler.MouseWheel); }); }); + + describe('dispatching events', function() { + + it('dispatches a mousewheel event', function() { + var handler = new ol.handler.MouseWheel(map, {}); + goog.events.listen(map, 'mousewheel', listener.fn); + + var evt = new goog.events.MouseWheelEvent(1, 'foo', 0, 1); + handler.handleMouseWheel(evt); + + expect(listener.fn.calls[0].args[0].type).toBe('mousewheel'); + expect(listener.fn.calls[0].args[0].originalEvent).toBe(evt); + }); + + it('calls the default action on the default control', function() { + var control = new ol.control.DefaultControl(); + spyOn(control, 'defaultMouseWheel'); + map.setDefaultControl(control); + var handler = new ol.handler.MouseWheel(map, {}); + + handler.handleMouseWheel(new goog.events.MouseWheelEvent(1, 'foo', 0, 1)); + expect(control.defaultMouseWheel).toHaveBeenCalled(); + }); + + }); });