tests for mouse- and touchsource
This commit is contained in:
101
test/spec/ol/pointer/mousesource.test.js
Normal file
101
test/spec/ol/pointer/mousesource.test.js
Normal file
@@ -0,0 +1,101 @@
|
||||
goog.provide('ol.test.pointer.MouseSource');
|
||||
|
||||
describe('ol.pointer.MouseSource', function() {
|
||||
var handler;
|
||||
var target;
|
||||
var eventSpy;
|
||||
var clock;
|
||||
|
||||
beforeEach(function() {
|
||||
clock = sinon.useFakeTimers();
|
||||
target = goog.dom.createElement(goog.dom.TagName.DIV);
|
||||
|
||||
// make sure that a mouse and touch event source is used
|
||||
ol.BrowserFeature.HAS_POINTER = false;
|
||||
ol.BrowserFeature.HAS_MSPOINTER = false;
|
||||
ol.BrowserFeature.HAS_TOUCH = true;
|
||||
|
||||
handler = new ol.pointer.PointerEventHandler(target);
|
||||
eventSpy = sinon.spy();
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
handler.dispose();
|
||||
});
|
||||
|
||||
describe('simulated mouse events', function() {
|
||||
it('prevents simulated mouse events', function() {
|
||||
goog.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() {
|
||||
goog.events.listen(handler, 'pointerdown', eventSpy);
|
||||
|
||||
// the two events are at different positions
|
||||
simulateTouchEvent('touchstart', 10, 20);
|
||||
simulateEvent('mousedown', 10, 40);
|
||||
|
||||
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
|
||||
var touchSource = handler.eventSourceList_[1];
|
||||
touchSource.DEDUP_TIMEOUT = 100;
|
||||
|
||||
goog.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,
|
||||
clientX: y,
|
||||
target: target
|
||||
}
|
||||
];
|
||||
|
||||
var event = new goog.events.BrowserEvent({
|
||||
type: type,
|
||||
touches: touches,
|
||||
changedTouches: touches
|
||||
});
|
||||
goog.events.fireListeners(target, type, false, event);
|
||||
}
|
||||
|
||||
function simulateEvent(type, x, y) {
|
||||
var event = new goog.events.BrowserEvent({
|
||||
type: type,
|
||||
clientX: x,
|
||||
clientY: y,
|
||||
target: target
|
||||
});
|
||||
goog.events.fireListeners(target, type, false, event);
|
||||
}
|
||||
});
|
||||
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.TagName');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.BrowserEvent');
|
||||
goog.require('ol.BrowserFeature');
|
||||
goog.require('ol.pointer.MouseSource');
|
||||
goog.require('ol.pointer.PointerEvent');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
Reference in New Issue
Block a user