Files
openlayers/test/spec/ol/MapBrowserEventHandler.test.js
Tim Schaub 054af09032 Make code prettier
This updates ESLint and our shared eslint-config-openlayers to use Prettier.  Most formatting changes were automatically applied with this:

    npm run lint -- --fix

A few manual changes were required:

 * In `examples/offscreen-canvas.js`, the `//eslint-disable-line` comment needed to be moved to the appropriate line to disable the error about the `'worker-loader!./offscreen-canvas.worker.js'` import.
 * In `examples/webpack/exapmle-builder.js`, spaces could not be added after a couple `function`s for some reason.  While editing this, I reworked `ExampleBuilder` to be a class.
 * In `src/ol/format/WMSGetFeatureInfo.js`, the `// @ts-ignore` comment needed to be moved down one line so it applied to the `parsersNS` argument.
2020-04-06 12:54:09 -06:00

192 lines
6.3 KiB
JavaScript

import Event from '../../../src/ol/events/Event.js';
import Map from '../../../src/ol/Map.js';
import MapBrowserEventHandler from '../../../src/ol/MapBrowserEventHandler.js';
import {DEVICE_PIXEL_RATIO} from '../../../src/ol/has.js';
import {listen} from '../../../src/ol/events.js';
describe('ol/MapBrowserEventHandler', function () {
describe('#emulateClick_', function () {
let clock;
let handler;
let clickSpy;
let singleclickSpy;
let dblclickSpy;
let target;
beforeEach(function () {
clock = sinon.useFakeTimers();
target = document.createElement('div');
handler = new MapBrowserEventHandler(
new Map({
target: target,
})
);
clickSpy = sinon.spy();
listen(handler, 'click', clickSpy);
singleclickSpy = sinon.spy();
listen(handler, 'singleclick', singleclickSpy);
dblclickSpy = sinon.spy();
listen(handler, 'dblclick', dblclickSpy);
});
afterEach(function () {
clock.restore();
});
it('emulates click', function () {
const event = new Event();
event.type = 'pointerdown';
(event.target = target), (event.clientX = 0);
event.clientY = 0;
handler.emulateClick_(event);
expect(clickSpy.called).to.be.ok();
});
it('emulates singleclick', function () {
const event = new Event();
event.type = 'pointerdown';
event.target = target;
event.clientX = 0;
event.clientY = 0;
handler.emulateClick_(event);
expect(singleclickSpy.called).to.not.be.ok();
expect(dblclickSpy.called).to.not.be.ok();
clock.tick(250);
expect(singleclickSpy.calledOnce).to.be.ok();
expect(dblclickSpy.called).to.not.be.ok();
handler.emulateClick_(event);
expect(singleclickSpy.calledOnce).to.be.ok();
expect(dblclickSpy.called).to.not.be.ok();
});
it('emulates dblclick', function () {
const event = new Event();
event.type = 'pointerdown';
event.target = target;
event.clientX = 0;
event.clientY = 0;
handler.emulateClick_(event);
expect(singleclickSpy.called).to.not.be.ok();
expect(dblclickSpy.called).to.not.be.ok();
handler.emulateClick_(event);
expect(singleclickSpy.called).to.not.be.ok();
expect(dblclickSpy.calledOnce).to.be.ok();
clock.tick(250);
expect(singleclickSpy.called).to.not.be.ok();
expect(dblclickSpy.calledOnce).to.be.ok();
});
});
describe('#down_', function () {
let handler;
beforeEach(function () {
handler = new MapBrowserEventHandler(new Map({}));
});
it('is null if no "down" type event has been handled', function () {
expect(handler.down_).to.be(null);
});
it('is an event after handlePointerDown_ has been called', function () {
const event = new Event('pointerdown');
handler.handlePointerDown_(event);
expect(handler.down_).to.be(event);
});
});
describe('#isMoving_', function () {
let defaultHandler;
let moveToleranceHandler;
let pointerdownAt0;
beforeEach(function () {
defaultHandler = new MapBrowserEventHandler(new Map({}));
moveToleranceHandler = new MapBrowserEventHandler(new Map({}), 8);
pointerdownAt0 = new Event();
pointerdownAt0.type = 'pointerdown';
pointerdownAt0.clientX = 0;
pointerdownAt0.clientY = 0;
defaultHandler.handlePointerDown_(pointerdownAt0);
moveToleranceHandler.handlePointerDown_(pointerdownAt0);
});
it('is not moving if distance is 0', function () {
pointerdownAt0 = new Event();
pointerdownAt0.type = 'pointerdown';
pointerdownAt0.clientX = 0;
pointerdownAt0.clientY = 0;
expect(defaultHandler.isMoving_(pointerdownAt0)).to.be(false);
});
it('is moving if distance is 2', function () {
const pointerdownAt2 = new Event();
pointerdownAt2.type = 'pointerdown';
pointerdownAt2.clientX = DEVICE_PIXEL_RATIO + 1;
pointerdownAt2.clientY = DEVICE_PIXEL_RATIO + 1;
expect(defaultHandler.isMoving_(pointerdownAt2)).to.be(true);
});
it('is moving with negative distance', function () {
const pointerdownAt2 = new Event();
pointerdownAt2.type = 'pointerdown';
pointerdownAt2.clientX = -(DEVICE_PIXEL_RATIO + 1);
pointerdownAt2.clientY = -(DEVICE_PIXEL_RATIO + 1);
expect(defaultHandler.isMoving_(pointerdownAt2)).to.be(true);
});
it('is not moving if distance is less than move tolerance', function () {
const pointerdownAt2 = new Event();
pointerdownAt2.type = 'pointerdown';
pointerdownAt2.clientX = DEVICE_PIXEL_RATIO + 1;
pointerdownAt2.clientY = DEVICE_PIXEL_RATIO + 1;
expect(moveToleranceHandler.isMoving_(pointerdownAt2)).to.be(false);
});
it('is moving if distance is greater than move tolerance', function () {
const pointerdownAt9 = new Event();
pointerdownAt9.type = 'pointerdown';
pointerdownAt9.clientX = DEVICE_PIXEL_RATIO * 8 + 1;
pointerdownAt9.clientY = DEVICE_PIXEL_RATIO * 8 + 1;
expect(moveToleranceHandler.isMoving_(pointerdownAt9)).to.be(true);
});
it('is moving when moving back close to the down pixel', function () {
const pointermoveAt9 = new Event();
pointermoveAt9.type = 'pointermove';
pointermoveAt9.clientX = DEVICE_PIXEL_RATIO * 8 + 1;
pointermoveAt9.clientY = DEVICE_PIXEL_RATIO * 8 + 1;
moveToleranceHandler.handlePointerMove_(pointermoveAt9);
expect(moveToleranceHandler.isMoving_(pointermoveAt9)).to.be(true);
const pointermoveAt2 = new Event();
pointermoveAt2.type = 'pointermove';
pointermoveAt2.clientX = DEVICE_PIXEL_RATIO + 1;
pointermoveAt2.clientY = DEVICE_PIXEL_RATIO + 1;
moveToleranceHandler.handlePointerMove_(pointermoveAt2);
expect(moveToleranceHandler.isMoving_(pointermoveAt2)).to.be(true);
});
});
describe('handleTouchMove_', function () {
let handler;
beforeEach(function () {
handler = new MapBrowserEventHandler(new Map({}));
});
it('prevents default on touchmove event', function () {
handler.originalPointerMoveEvent_ = {
defaultPrevented: true,
};
const event = {
preventDefault: sinon.spy(),
};
handler.handleTouchMove_(event);
expect(event.preventDefault.callCount).to.be(1);
});
});
});