143 lines
4.0 KiB
JavaScript
143 lines
4.0 KiB
JavaScript
import {
|
|
InputRemoting,
|
|
} from "../src/inputremoting.js";
|
|
|
|
import {
|
|
Sender,
|
|
Observer
|
|
} from "../src/sender.js";
|
|
|
|
import {jest} from '@jest/globals';
|
|
import {DOMRect} from "./domrect.js";
|
|
|
|
// mock
|
|
|
|
class RTCDataChannel {
|
|
get readyState() {
|
|
return "open";
|
|
}
|
|
/* eslint-disable no-unused-vars */
|
|
send(message) {
|
|
}
|
|
}
|
|
|
|
describe(`Sender`, () => {
|
|
let inputRemoting = null;
|
|
let sender = null;
|
|
let observer = null;
|
|
let events = {};
|
|
let dc = null;
|
|
beforeEach(async () => {
|
|
// Empty our events before each test case
|
|
events = {};
|
|
|
|
// Define the addEventListener method with a Jest mock function
|
|
document.addEventListener = jest.fn((event, callback) => {
|
|
events[event] = callback;
|
|
});
|
|
|
|
document.removeEventListener = jest.fn((event, callback) => {
|
|
delete events[event];
|
|
});
|
|
document.getBoundingClientRect = function(){ return new DOMRect(0,0,0,0); };
|
|
sender = new Sender(document);
|
|
inputRemoting = new InputRemoting(sender);
|
|
dc = new RTCDataChannel();
|
|
observer = new Observer(dc);
|
|
});
|
|
test('devices', () => {
|
|
sender.addMouse();
|
|
expect(sender.devices.length).toBe(1);
|
|
sender.addKeyboard();
|
|
expect(sender.devices.length).toBe(2);
|
|
});
|
|
test('send messages while called startSending', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addMouse();
|
|
sender.addKeyboard();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
expect(dc.send).toHaveBeenCalled();
|
|
});
|
|
describe('mouse', () => {
|
|
test('click', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addMouse();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.click(
|
|
new MouseEvent('click', { buttons:1, clientX:0, clientY:0} ));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
test('mousemove', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addMouse();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.mousemove(
|
|
new MouseEvent('mousemove', { buttons:1, deltaX:0, deltaY:0 }));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
test('wheel', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addMouse();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.wheel(
|
|
new WheelEvent('wheel', { wheelDelta:0, deltaX:0, deltaY:0 }));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
});
|
|
describe('keyboard', () => {
|
|
test('keydown', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addKeyboard();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.keydown(
|
|
new KeyboardEvent('keydown', { code: 'KeyA' }));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
test('keydown repeat', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addKeyboard();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.keydown(
|
|
new KeyboardEvent('keydown', { code: 'KeyA', repeat: true }));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
});
|
|
describe('touchscreen', () => {
|
|
test('touchstart', () => {
|
|
jest.spyOn(dc, 'send');
|
|
sender.addTouchscreen();
|
|
inputRemoting.subscribe(observer);
|
|
inputRemoting.startSending();
|
|
events.touchstart(
|
|
new TouchEvent("touchstart", {
|
|
changedTouches: [{ // InputInit
|
|
identifier: 0,
|
|
target: null,
|
|
clientX: 0,
|
|
clientY: 0,
|
|
screenX: 0,
|
|
screenY: 0,
|
|
pageX: 0,
|
|
pageY: 0,
|
|
radiusX: 0,
|
|
radiusY: 0,
|
|
rotationAngle: 0,
|
|
force: 0,
|
|
altitudeAngle: 0,
|
|
azimuthAngle:0,
|
|
touchType: "direct"
|
|
}]
|
|
}));
|
|
expect(dc.send).toHaveBeenCalledWith(expect.any(ArrayBuffer));
|
|
});
|
|
});
|
|
describe('gamepad', () => {
|
|
//todo
|
|
});
|
|
}); |