]>
git.proxmox.com Git - mirror_novnc.git/blob - tests/test.mouse.js
1 const expect
= chai
.expect
;
3 import Mouse
from '../core/input/mouse.js';
5 describe('Mouse Event Handling', function () {
10 beforeEach(function () {
11 // For these tests we can assume that the canvas is 100x100
12 // located at coordinates 10x10
13 target
= document
.createElement('canvas');
14 target
.style
.position
= "absolute";
15 target
.style
.top
= "10px";
16 target
.style
.left
= "10px";
17 target
.style
.width
= "100px";
18 target
.style
.height
= "100px";
19 document
.body
.appendChild(target
);
21 afterEach(function () {
22 document
.body
.removeChild(target
);
26 // The real constructors might not work everywhere we
27 // want to run these tests
28 const mouseevent
= (typeArg
, MouseEventInit
) => {
29 const e
= { type
: typeArg
};
30 for (let key
in MouseEventInit
) {
31 e
[key
] = MouseEventInit
[key
];
33 e
.stopPropagation
= sinon
.spy();
34 e
.preventDefault
= sinon
.spy();
38 describe('Decode Mouse Events', function () {
39 it('should decode mousedown events', function (done
) {
40 const mouse
= new Mouse(target
);
41 mouse
.onmousebutton
= (x
, y
, down
, bmask
) => {
42 expect(bmask
).to
.be
.equal(0x01);
43 expect(down
).to
.be
.equal(1);
46 mouse
._handleMouseDown(mouseevent('mousedown', { button
: 0 }));
48 it('should decode mouseup events', function (done
) {
50 const mouse
= new Mouse(target
);
51 mouse
.onmousebutton
= (x
, y
, down
, bmask
) => {
52 expect(bmask
).to
.be
.equal(0x01);
54 expect(down
).to
.not
.be
.equal(1);
58 mouse
._handleMouseDown(mouseevent('mousedown', { button
: 0 }));
59 mouse
._handleMouseUp(mouseevent('mouseup', { button
: 0 }));
61 it('should decode mousemove events', function (done
) {
62 const mouse
= new Mouse(target
);
63 mouse
.onmousemove
= (x
, y
) => {
64 // Note that target relative coordinates are sent
65 expect(x
).to
.be
.equal(40);
66 expect(y
).to
.be
.equal(10);
69 mouse
._handleMouseMove(mouseevent('mousemove',
70 { clientX
: 50, clientY
: 20 }));
72 it('should decode mousewheel events', function (done
) {
74 const mouse
= new Mouse(target
);
75 mouse
.onmousebutton
= (x
, y
, down
, bmask
) => {
77 expect(bmask
).to
.be
.equal(1<<6);
79 expect(down
).to
.be
.equal(1);
80 } else if (calls
=== 2) {
81 expect(down
).to
.not
.be
.equal(1);
85 mouse
._handleMouseWheel(mouseevent('mousewheel',
86 { deltaX
: 50, deltaY
: 0,
91 describe('Accumulate mouse wheel events with small delta', function () {
93 it('should accumulate wheel events if small enough', function () {
94 const mouse
= new Mouse(target
);
95 mouse
.onmousebutton
= sinon
.spy();
97 mouse
._handleMouseWheel(mouseevent(
98 'mousewheel', { clientX
: 18, clientY
: 40,
99 deltaX
: 4, deltaY
: 0, deltaMode
: 0 }));
100 mouse
._handleMouseWheel(mouseevent(
101 'mousewheel', { clientX
: 18, clientY
: 40,
102 deltaX
: 4, deltaY
: 0, deltaMode
: 0 }));
105 expect(mouse
._accumulatedWheelDeltaX
).to
.be
.equal(8);
107 mouse
._handleMouseWheel(mouseevent(
108 'mousewheel', { clientX
: 18, clientY
: 40,
109 deltaX
: 4, deltaY
: 0, deltaMode
: 0 }));
111 expect(mouse
.onmousebutton
).to
.have
.callCount(2); // mouse down and up
113 mouse
._handleMouseWheel(mouseevent(
114 'mousewheel', { clientX
: 18, clientY
: 40,
115 deltaX
: 4, deltaY
: 9, deltaMode
: 0 }));
117 expect(mouse
._accumulatedWheelDeltaX
).to
.be
.equal(4);
118 expect(mouse
._accumulatedWheelDeltaY
).to
.be
.equal(9);
120 expect(mouse
.onmousebutton
).to
.have
.callCount(2); // still
123 it('should not accumulate large wheel events', function () {
124 const mouse
= new Mouse(target
);
125 mouse
.onmousebutton
= sinon
.spy();
127 mouse
._handleMouseWheel(mouseevent(
128 'mousewheel', { clientX
: 18, clientY
: 40,
129 deltaX
: 11, deltaY
: 0, deltaMode
: 0 }));
130 mouse
._handleMouseWheel(mouseevent(
131 'mousewheel', { clientX
: 18, clientY
: 40,
132 deltaX
: 0, deltaY
: 70, deltaMode
: 0 }));
133 mouse
._handleMouseWheel(mouseevent(
134 'mousewheel', { clientX
: 18, clientY
: 40,
135 deltaX
: 400, deltaY
: 400, deltaMode
: 0 }));
137 expect(mouse
.onmousebutton
).to
.have
.callCount(8); // mouse down and up
140 it('should account for non-zero deltaMode', function () {
141 const mouse
= new Mouse(target
);
142 mouse
.onmousebutton
= sinon
.spy();
144 mouse
._handleMouseWheel(mouseevent(
145 'mousewheel', { clientX
: 18, clientY
: 40,
146 deltaX
: 0, deltaY
: 2, deltaMode
: 1 }));
148 mouse
._handleMouseWheel(mouseevent(
149 'mousewheel', { clientX
: 18, clientY
: 40,
150 deltaX
: 1, deltaY
: 0, deltaMode
: 2 }));
152 expect(mouse
.onmousebutton
).to
.have
.callCount(4); // mouse down and up