173 lines
4.4 KiB
JavaScript
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);
|
||
|
|
});
|
||
|
|
});
|