openlayers
Version:
Build tools and sources for developing OpenLayers based mapping applications
98 lines (76 loc) • 2.42 kB
JavaScript
goog.provide('ol.test.pointer.MouseSource');
goog.require('ol.events');
goog.require('ol.events.EventTarget');
goog.require('ol.has');
goog.require('ol.pointer.PointerEventHandler');
goog.require('ol.pointer.TouchSource');
describe('ol.pointer.MouseSource', function() {
var handler;
var target;
var eventSpy;
var clock;
beforeEach(function() {
clock = sinon.useFakeTimers();
target = new ol.events.EventTarget();
// make sure that a mouse and touch event source is used
ol.has.POINTER = false;
ol.has.MSPOINTER = false;
ol.has.TOUCH = true;
handler = new ol.pointer.PointerEventHandler(target);
eventSpy = sinon.spy();
});
afterEach(function() {
clock.restore();
handler.dispose();
});
describe('simulated mouse events', function() {
it('prevents simulated mouse events', function() {
ol.events.listen(handler, 'pointerdown', eventSpy);
// simulates that a mouse event is triggered from a touch
simulateTouchEvent('touchstart', 10, 20);
simulateEvent('mousedown', 10, 20);
expect(eventSpy.calledOnce).to.be.ok();
});
it('dispatches real mouse events', function() {
ol.events.listen(handler, 'pointerdown', eventSpy);
// the two events are at different positions
simulateTouchEvent('touchstart', 10, 20);
simulateEvent('mousedown', 10, 50);
expect(eventSpy.calledTwice).to.be.ok();
});
it('dispatches real mouse events after timeout', function() {
// set the timeout to a lower value, to speed up the tests
ol.pointer.TouchSource.DEDUP_TIMEOUT = 100;
ol.events.listen(handler, 'pointerdown', eventSpy);
// first simulate a touch event, then a mouse event
// at the same position after a timeout
simulateTouchEvent('touchstart', 10, 20);
clock.tick(150);
simulateEvent('mousedown', 10, 20);
expect(eventSpy.calledTwice).to.be.ok();
});
});
function simulateTouchEvent(type, x, y) {
var touches = [{
identifier: 4,
clientX: x,
clientY: y,
target: target
}];
var event = {
type: type,
touches: touches,
changedTouches: touches
};
target.dispatchEvent(event);
}
function simulateEvent(type, x, y) {
var event = {
type: type,
clientX: x,
clientY: y,
target: target
};
target.dispatchEvent(event);
}
});