Files
video_socket-server/client/test/unit/inputremoting.test.js
2026-05-25 20:37:36 +08:00

133 lines
3.9 KiB
JavaScript

import {
InputDevice,
MouseState,
KeyboardState,
TouchscreenState,
GamepadState
} from "../../src/input/inputdevice.js";
import {
MessageType,
NewDeviceMsg,
NewEventsMsg,
RemoveDeviceMsg,
InputRemoting,
} from "../../src/input/inputremoting.js";
import {
Sender,
Observer
} from "../../src/core/sender.js";
import {DOMRect} from "../helpers/domrect.js";
describe(`InputRemoting`, () => {
let sender = null;
let inputRemoting = null;
let observer = null;
beforeEach(async () => {
document.getBoundingClientRect = function(){ return new DOMRect(0,0,0,0); };
sender = new Sender(document);
inputRemoting = new InputRemoting(sender);
let dc = null;
observer = new Observer(dc);
});
test('startSending', () => {
expect.assertions(0);
inputRemoting.startSending();
});
test('stopSending', () => {
expect.assertions(0);
inputRemoting.startSending();
inputRemoting.stopSending();
});
test('subscribe', () => {
expect.assertions(0);
inputRemoting.subscribe(observer);
});
});
test('create NewDeviceMsg', () => {
const device = new InputDevice("Keyboard", "Keyboard", 0, null, null);
const msg = NewDeviceMsg.create(device);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.NewDevice);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});
describe('create NewEventMsg', () => {
test('using MouseState', () => {
const event = new MouseEvent('click', { buttons:0, clientX:0, clientY:0} );
const state = new MouseState(event);
const msg = NewEventsMsg.create(state);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.NewEvents);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});
test('using KeyboardState', () => {
const event = new KeyboardEvent("keydown", { code: 'KeyA' });
const state = new KeyboardState(event);
const msg = NewEventsMsg.create(state);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.NewEvents);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});
test('using TouchscreenState', () => {
const event = 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"
}]
});
const state = new TouchscreenState(event, null, Date.now());
expect(state.touchData).not.toBeNull();
expect(state.touchData).toHaveLength(1);
const msg = NewEventsMsg.create(state.touchData[0]);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.NewEvents);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});
test('using GamepadState', () => {
const event = {
type: 'gamepadupdated',
gamepad : {
id: 1,
buttons: Array(16).fill({ pressed: false, value: 1 }),
axes:[1, 1, 1, 1]
}};
const state = new GamepadState(event);
const msg = NewEventsMsg.create(state);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.NewEvents);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});
});
test('create RemoveDeviceMsg', () => {
const device = new InputDevice("Keyboard", "Keyboard", 0, null, null);
const msg = RemoveDeviceMsg.create(device);
expect(msg.participant_id).toBe(0);
expect(msg.type).toBe(MessageType.RemoveDevice);
expect(msg.data).toBeInstanceOf(ArrayBuffer);
expect(msg.data.byteLength).toBeGreaterThan(0);
});