74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
const expect = chai.expect;
|
|
|
|
import Mouse from '../core/input/mouse.js';
|
|
|
|
describe('Mouse Event Handling', function () {
|
|
"use strict";
|
|
|
|
let target;
|
|
|
|
beforeEach(function () {
|
|
// For these tests we can assume that the canvas is 100x100
|
|
// located at coordinates 10x10
|
|
target = document.createElement('canvas');
|
|
target.style.position = "absolute";
|
|
target.style.top = "10px";
|
|
target.style.left = "10px";
|
|
target.style.width = "100px";
|
|
target.style.height = "100px";
|
|
document.body.appendChild(target);
|
|
});
|
|
afterEach(function () {
|
|
document.body.removeChild(target);
|
|
target = null;
|
|
});
|
|
|
|
// The real constructors might not work everywhere we
|
|
// want to run these tests
|
|
const mouseevent = (typeArg, MouseEventInit) => {
|
|
const e = { type: typeArg };
|
|
for (let key in MouseEventInit) {
|
|
e[key] = MouseEventInit[key];
|
|
}
|
|
e.stopPropagation = sinon.spy();
|
|
e.preventDefault = sinon.spy();
|
|
return e;
|
|
};
|
|
|
|
describe('Decode Mouse Events', function () {
|
|
it('should decode mousedown events', function (done) {
|
|
const mouse = new Mouse(target);
|
|
mouse.onmousebutton = (x, y, down, bmask) => {
|
|
expect(bmask).to.be.equal(0x01);
|
|
expect(down).to.be.equal(1);
|
|
done();
|
|
};
|
|
mouse._handleMouseDown(mouseevent('mousedown', { button: 0 }));
|
|
});
|
|
it('should decode mouseup events', function (done) {
|
|
let calls = 0;
|
|
const mouse = new Mouse(target);
|
|
mouse.onmousebutton = (x, y, down, bmask) => {
|
|
expect(bmask).to.be.equal(0x01);
|
|
if (calls++ === 1) {
|
|
expect(down).to.not.be.equal(1);
|
|
done();
|
|
}
|
|
};
|
|
mouse._handleMouseDown(mouseevent('mousedown', { button: 0 }));
|
|
mouse._handleMouseUp(mouseevent('mouseup', { button: 0 }));
|
|
});
|
|
it('should decode mousemove events', function (done) {
|
|
const mouse = new Mouse(target);
|
|
mouse.onmousemove = (x, y) => {
|
|
// Note that target relative coordinates are sent
|
|
expect(x).to.be.equal(40);
|
|
expect(y).to.be.equal(10);
|
|
done();
|
|
};
|
|
mouse._handleMouseMove(mouseevent('mousemove',
|
|
{ clientX: 50, clientY: 20 }));
|
|
});
|
|
});
|
|
});
|