Files
webRtc/WebApp/client/test/inputdevice.test.js
zhangzheng 1bb1fee5cc 111
2026-02-27 18:35:40 +08:00

173 lines
4.4 KiB
JavaScript

import {
FourCC,
Mouse,
Keyboard,
Touchscreen,
Gamepad,
KeyboardState,
MouseState,
TouchscreenState,
GamepadState,
StateEvent,
InputEvent,
TextEvent
} from "../src/inputdevice.js";
describe(`FourCC`, () => {
test('toInt32', () => {
const number = new FourCC('A', 'A', 'A', 'A').toInt32();
expect(number).toBe(0x41414141);
});
});
describe(`MouseState`, () => {
describe(`with MouseEvent`, () => {
let event;
beforeEach(() => {
event = new MouseEvent('click', { buttons:1, clientX:0, clientY:0});
});
test('format', () => {
const format = new MouseState(event).format;
expect(format).toBe(0x4d4f5553);
});
test('buffer', () => {
const state = new MouseState(event);
expect(state.buffer.byteLength).toBeGreaterThan(0);
});
});
describe(`with WheelEvent`, () => {
let event;
beforeEach(() => {
event = new WheelEvent('wheel', { deltaX:0, deltaY:0 });
});
test('format', () => {
const format = new MouseState(event).format;
expect(format).toBe(0x4d4f5553);
});
test('buffer', () => {
const state = new MouseState(event);
expect(state.buffer.byteLength).toBeGreaterThan(0);
});
});
});
describe(`KeyboardState`, () => {
let event;
beforeEach(() => {
event = new KeyboardEvent('keydown', { code: 'KeyA' });
});
test('format', () => {
const format = new KeyboardState(event).format;
expect(format).toBe(0x4b455953);
});
test('buffer', () => {
const state = new KeyboardState(event);
expect(state.buffer.byteLength).toBeGreaterThan(0);
});
});
describe(`TouchscreenState`, () => {
let event;
beforeEach(() => {
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"
}]
});
});
test('format', () => {
const format = new TouchscreenState(event, null, Date.now()).format;
expect(format).toBe(0x54534352);
});
test('buffer', () => {
const state = new TouchscreenState(event, null, Date.now());
expect(state.buffer.byteLength).toBeGreaterThan(0);
});
});
describe(`GamepadState`, () => {
let event;
beforeEach(() => {
event = {
type: 'gamepadupdated',
gamepad : {
id: 1,
buttons: Array(16).fill({ pressed: false, value: 1 }),
axes:[0, 0, 0, 0]
}};
});
test('format', () => {
const format = new GamepadState(event).format;
expect(format).toBe(0x47504144);
});
test('buffer', () => {
const state = new GamepadState(event);
expect(state.buffer.byteLength).toBeGreaterThan(0);
});
});
describe(`StateEvent`, () => {
let state;
beforeEach(() => {
const event = new KeyboardEvent('keydown', { code: 'KeyA' });
state = new KeyboardState(event);
});
test('buffer', () => {
const stateEvent = StateEvent.fromState(state, 0, Date.now());
expect(new Int32Array(stateEvent.buffer.slice(0, 4))[0]).toBe(StateEvent.format);
});
});
describe(`TextEvent`, () => {
test('buffer', () => {
const event = new KeyboardEvent('keydown', { code: 'KeyA', key: "a"});
const textEvent = TextEvent.create(0, event, Date.now());
expect(new Int32Array(textEvent.buffer.slice(0, 4))[0]).toBe(TextEvent.format);
const offset = InputEvent.size;
// 'a' is 97
expect(new Uint32Array(textEvent.buffer.slice(offset, offset+4))[0]).toBe(97);
});
});
describe(`Mouse`, () => {
test('alignedSizeInBytes', () => {
let device = new Mouse("Mouse", "Mouse", 1, null, null);
expect(device).toBeInstanceOf(Mouse);
});
});
describe(`Keyboard`, () => {
test('alignedSizeInBytes', () => {
let device = new Keyboard("Keyboard", "Keyboard", 1, null, null);
expect(device).toBeInstanceOf(Keyboard);
});
});
describe(`Touchscreen`, () => {
test('alignedSizeInBytes', () => {
let device = new Touchscreen("Touchscreen", "Touchscreen", 1, null, null);
expect(device).toBeInstanceOf(Touchscreen);
});
});
describe(`Gamepad`, () => {
test('alignedSizeInBytes', () => {
let device = new Gamepad("Gamepad", "Gamepad", 1, null, null);
expect(device).toBeInstanceOf(Gamepad);
});
});