@flighthq/input 0.5.1-next.1350.8ce488b → 0.5.1-next.1404.457d1da
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/inputManager.d.ts +7 -11
- package/dist/inputManager.d.ts.map +1 -1
- package/dist/inputManager.js +12 -38
- package/dist/inputManager.js.map +1 -1
- package/package.json +4 -4
- package/src/index.test.ts +2 -2
- package/src/inputManager.test.ts +159 -271
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/input`. The `@flight
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/input@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/input@0.5.1-next.1404.457d1da](https://github.com/flighthq/flight/tree/457d1da918a60be5853b84eb6c25530a66662cef/packages/input)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/457d1da918a60be5853b84eb6c25530a66662cef/LICENSE.md)
|
package/dist/inputManager.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AttachInputOptions, GamepadAxisKind, GamepadButtonKind, GamepadMappingKind,
|
|
1
|
+
import type { AttachInputOptions, GamepadAxisKind, GamepadButtonKind, GamepadMappingKind, HostInputIngressCapability, InputIngressSource, InputKeyRepeatOptions, InputKeyRepeatTimer, InputManager, InputSignals, InputState, EntityConstruction } from '@flighthq/types/contract';
|
|
2
2
|
/**
|
|
3
3
|
* Filters a single gamepad axis value through a simple dead zone.
|
|
4
4
|
* Values within `[-deadZone, deadZone]` are mapped to `0`; values outside
|
|
@@ -21,12 +21,12 @@ export declare function applyGamepadStickDeadZone(out: {
|
|
|
21
21
|
x: number;
|
|
22
22
|
y: number;
|
|
23
23
|
}, x: number, y: number, deadZone: number): void;
|
|
24
|
-
export declare function attachGamepadInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
25
|
-
export declare function attachKeyboardInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
26
|
-
export declare function attachPointerInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
27
|
-
export declare function attachRelativePointerInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
28
|
-
export declare function attachTextInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
29
|
-
export declare function attachWheelInput(manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
24
|
+
export declare function attachGamepadInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
25
|
+
export declare function attachKeyboardInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
26
|
+
export declare function attachPointerInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
27
|
+
export declare function attachRelativePointerInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
28
|
+
export declare function attachTextInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
29
|
+
export declare function attachWheelInput(inputIngress: Readonly<HostInputIngressCapability>, manager: InputManager, source: InputIngressSource, options?: Readonly<AttachInputOptions>): void;
|
|
30
30
|
/**
|
|
31
31
|
* Subscribes `state` to all signals on `manager` to maintain a live held-state snapshot.
|
|
32
32
|
* Also tracks per-frame edge sets (`justPressedKeys`, `justReleasedKeys`,
|
|
@@ -69,7 +69,6 @@ export declare function getGamepadButtonName(mapping: GamepadMappingKind, index:
|
|
|
69
69
|
* `gamepad` is the gamepad index; `axis` is the axis index.
|
|
70
70
|
*/
|
|
71
71
|
export declare function getInputGamepadAxis(state: Readonly<InputState>, gamepad: number, axis: number): number;
|
|
72
|
-
export declare function getInputIngressBackend(): HostInputIngressProvider;
|
|
73
72
|
/**
|
|
74
73
|
* Creates a key-repeat timer for non-DOM sources (gamepad d-pad buttons,
|
|
75
74
|
* virtual on-screen keys, native backends) that do not generate their own
|
|
@@ -100,7 +99,6 @@ export declare function initializeInputSignals(out: EntityConstruction<InputSign
|
|
|
100
99
|
* logical frame to roll the edge sets.
|
|
101
100
|
*/
|
|
102
101
|
export declare function initializeInputState(out: EntityConstruction<InputState>): void;
|
|
103
|
-
export declare function installInputIngressHostBackend(backend: HostInputIngressProvider): void;
|
|
104
102
|
/**
|
|
105
103
|
* Returns `true` if the given gamepad button is currently held.
|
|
106
104
|
* `gamepad` is the gamepad index; `button` is the button index.
|
|
@@ -115,8 +113,6 @@ export declare function isInputKeyDown(state: Readonly<InputState>, keyCode: num
|
|
|
115
113
|
* `button` is the source-provided button index (0 = primary, 1 = middle, 2 = secondary, …).
|
|
116
114
|
*/
|
|
117
115
|
export declare function isInputPointerButtonDown(state: Readonly<InputState>, pointerId: number, button: number): boolean;
|
|
118
|
-
export declare function resetInputIngressBackendForTest(): void;
|
|
119
|
-
export declare function setInputIngressBackend(backend: HostInputIngressProvider | null): void;
|
|
120
116
|
/**
|
|
121
117
|
* Returns `true` if the gamepad button at `gamepad`/`button` was pressed
|
|
122
118
|
* this frame (i.e. transitioned from up → down since the last
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputManager.d.ts","sourceRoot":"","sources":["../src/inputManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAIlB,
|
|
1
|
+
{"version":3,"file":"inputManager.d.ts","sourceRoot":"","sources":["../src/inputManager.ts"],"names":[],"mappings":"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"}
|
package/dist/inputManager.js
CHANGED
|
@@ -48,28 +48,28 @@ export function applyGamepadStickDeadZone(out, x, y, deadZone) {
|
|
|
48
48
|
out.x = x * scale;
|
|
49
49
|
out.y = y * scale;
|
|
50
50
|
}
|
|
51
|
-
export function attachGamepadInput(manager, source, options) {
|
|
52
|
-
const release =
|
|
51
|
+
export function attachGamepadInput(inputIngress, manager, source, options) {
|
|
52
|
+
const release = inputIngress.attachGamepad(source, getInputIngressSink(manager), options);
|
|
53
53
|
setInputBinding(manager, source, kGamepadInput, release);
|
|
54
54
|
}
|
|
55
|
-
export function attachKeyboardInput(manager, source, options) {
|
|
56
|
-
const release =
|
|
55
|
+
export function attachKeyboardInput(inputIngress, manager, source, options) {
|
|
56
|
+
const release = inputIngress.attachKeyboard(source, getInputIngressSink(manager), options);
|
|
57
57
|
setInputBinding(manager, source, kKeyboardInput, release);
|
|
58
58
|
}
|
|
59
|
-
export function attachPointerInput(manager, source, options) {
|
|
60
|
-
const release =
|
|
59
|
+
export function attachPointerInput(inputIngress, manager, source, options) {
|
|
60
|
+
const release = inputIngress.attachPointer(source, getInputIngressSink(manager), options);
|
|
61
61
|
setInputBinding(manager, source, kPointerInput, release);
|
|
62
62
|
}
|
|
63
|
-
export function attachRelativePointerInput(manager, source, options) {
|
|
64
|
-
const release =
|
|
63
|
+
export function attachRelativePointerInput(inputIngress, manager, source, options) {
|
|
64
|
+
const release = inputIngress.attachRelativePointer(source, getInputIngressSink(manager), options);
|
|
65
65
|
setInputBinding(manager, source, kRelativePointerInput, release);
|
|
66
66
|
}
|
|
67
|
-
export function attachTextInput(manager, source, options) {
|
|
68
|
-
const release =
|
|
67
|
+
export function attachTextInput(inputIngress, manager, source, options) {
|
|
68
|
+
const release = inputIngress.attachText(source, getInputIngressSink(manager), options);
|
|
69
69
|
setInputBinding(manager, source, kTextInput, release);
|
|
70
70
|
}
|
|
71
|
-
export function attachWheelInput(manager, source, options) {
|
|
72
|
-
const release =
|
|
71
|
+
export function attachWheelInput(inputIngress, manager, source, options) {
|
|
72
|
+
const release = inputIngress.attachWheel(source, getInputIngressSink(manager), options);
|
|
73
73
|
setInputBinding(manager, source, kWheelInput, release);
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
@@ -256,9 +256,6 @@ export function getGamepadButtonName(mapping, index) {
|
|
|
256
256
|
export function getInputGamepadAxis(state, gamepad, axis) {
|
|
257
257
|
return state.axisValues.get(gamepad * MAX_GAMEPAD_AXES + axis) ?? 0;
|
|
258
258
|
}
|
|
259
|
-
export function getInputIngressBackend() {
|
|
260
|
-
return _customInputIngressBackend ?? _hostInputIngressBackend ?? _inputIngressSentinel;
|
|
261
|
-
}
|
|
262
259
|
/**
|
|
263
260
|
* Creates a key-repeat timer for non-DOM sources (gamepad d-pad buttons,
|
|
264
261
|
* virtual on-screen keys, native backends) that do not generate their own
|
|
@@ -351,11 +348,6 @@ export function initializeInputState(out) {
|
|
|
351
348
|
out.keysDown = new Set();
|
|
352
349
|
out.pointerButtonsDown = new Map();
|
|
353
350
|
}
|
|
354
|
-
// First host wins; a custom backend installed through setInputIngressBackend always takes precedence.
|
|
355
|
-
export function installInputIngressHostBackend(backend) {
|
|
356
|
-
if (_hostInputIngressBackend === null)
|
|
357
|
-
_hostInputIngressBackend = backend;
|
|
358
|
-
}
|
|
359
351
|
/**
|
|
360
352
|
* Returns `true` if the given gamepad button is currently held.
|
|
361
353
|
* `gamepad` is the gamepad index; `button` is the button index.
|
|
@@ -376,13 +368,6 @@ export function isInputKeyDown(state, keyCode) {
|
|
|
376
368
|
export function isInputPointerButtonDown(state, pointerId, button) {
|
|
377
369
|
return ((state.pointerButtonsDown.get(pointerId) ?? 0) & (1 << button)) !== 0;
|
|
378
370
|
}
|
|
379
|
-
export function resetInputIngressBackendForTest() {
|
|
380
|
-
_customInputIngressBackend = null;
|
|
381
|
-
_hostInputIngressBackend = null;
|
|
382
|
-
}
|
|
383
|
-
export function setInputIngressBackend(backend) {
|
|
384
|
-
_customInputIngressBackend = backend;
|
|
385
|
-
}
|
|
386
371
|
/**
|
|
387
372
|
* Returns `true` if the gamepad button at `gamepad`/`button` was pressed
|
|
388
373
|
* this frame (i.e. transitioned from up → down since the last
|
|
@@ -514,17 +499,6 @@ function getInputIngressSink(manager) {
|
|
|
514
499
|
_inputIngressSinks.set(manager, sink);
|
|
515
500
|
return sink;
|
|
516
501
|
}
|
|
517
|
-
function noopInputIngressRelease() { }
|
|
518
|
-
const _inputIngressSentinel = {
|
|
519
|
-
attachGamepad: () => noopInputIngressRelease,
|
|
520
|
-
attachKeyboard: () => noopInputIngressRelease,
|
|
521
|
-
attachPointer: () => noopInputIngressRelease,
|
|
522
|
-
attachRelativePointer: () => noopInputIngressRelease,
|
|
523
|
-
attachText: () => noopInputIngressRelease,
|
|
524
|
-
attachWheel: () => noopInputIngressRelease,
|
|
525
|
-
};
|
|
526
|
-
let _customInputIngressBackend = null;
|
|
527
|
-
let _hostInputIngressBackend = null;
|
|
528
502
|
// Internal teardown registry: maps a manager to its per-source, per-input-kind origin release.
|
|
529
503
|
// Kept off the public InputManager entity so attach/detach track bindings internally and callers hold
|
|
530
504
|
// nothing. The exact source identity lets one manager attach the same input kind to multiple
|
package/dist/inputManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputManager.js","sourceRoot":"","sources":["../src/inputManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inputManager.js","sourceRoot":"","sources":["../src/inputManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/input",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.1404.457d1da",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/entity": "0.5.1-next.
|
|
42
|
-
"@flighthq/signals": "0.5.1-next.
|
|
43
|
-
"@flighthq/types": "0.5.1-next.
|
|
41
|
+
"@flighthq/entity": "0.5.1-next.1404.457d1da",
|
|
42
|
+
"@flighthq/signals": "0.5.1-next.1404.457d1da",
|
|
43
|
+
"@flighthq/types": "0.5.1-next.1404.457d1da"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^5.3.0"
|
package/src/index.test.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HostInputIngressCapability } from '@flighthq/types/contract';
|
|
2
2
|
|
|
3
3
|
import * as inputContract from './contract';
|
|
4
4
|
import * as inputPublic from './index';
|
|
5
5
|
|
|
6
6
|
type LegacyInputPointerLockBackendMember = 'exitPointerLock' | 'hasPointerLock';
|
|
7
7
|
type LegacyInputPointerLockIngressOperation = Extract<
|
|
8
|
-
keyof
|
|
8
|
+
keyof HostInputIngressCapability,
|
|
9
9
|
LegacyInputPointerLockBackendMember
|
|
10
10
|
>;
|
|
11
11
|
|
package/src/inputManager.test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectSignal, emitSignal } from '@flighthq/signals/contract';
|
|
2
2
|
import type {
|
|
3
3
|
InputGamepadButtonData,
|
|
4
|
-
|
|
4
|
+
HostInputIngressCapability,
|
|
5
5
|
InputIngressSink,
|
|
6
6
|
InputIngressSource,
|
|
7
7
|
InputKeyboardData,
|
|
@@ -33,17 +33,13 @@ import {
|
|
|
33
33
|
getGamepadAxisName,
|
|
34
34
|
getGamepadButtonName,
|
|
35
35
|
getInputGamepadAxis,
|
|
36
|
-
getInputIngressBackend,
|
|
37
36
|
initializeInputKeyRepeatTimer,
|
|
38
37
|
initializeInputManager,
|
|
39
38
|
initializeInputSignals,
|
|
40
39
|
initializeInputState,
|
|
41
|
-
installInputIngressHostBackend,
|
|
42
40
|
isInputGamepadButtonDown,
|
|
43
41
|
isInputKeyDown,
|
|
44
42
|
isInputPointerButtonDown,
|
|
45
|
-
resetInputIngressBackendForTest,
|
|
46
|
-
setInputIngressBackend,
|
|
47
43
|
wasInputGamepadButtonPressed,
|
|
48
44
|
wasInputGamepadButtonReleased,
|
|
49
45
|
wasInputKeyPressed,
|
|
@@ -51,7 +47,6 @@ import {
|
|
|
51
47
|
} from './inputManager';
|
|
52
48
|
|
|
53
49
|
afterEach(() => {
|
|
54
|
-
resetInputIngressBackendForTest();
|
|
55
50
|
vi.unstubAllGlobals();
|
|
56
51
|
});
|
|
57
52
|
|
|
@@ -60,7 +55,7 @@ type InputIngressAttachmentKind = 'gamepad' | 'keyboard' | 'pointer' | 'relative
|
|
|
60
55
|
function createTestInputIngressBackend(
|
|
61
56
|
attach: (kind: InputIngressAttachmentKind, source: InputIngressSource, sink: InputIngressSink) => () => void = () =>
|
|
62
57
|
() => {},
|
|
63
|
-
):
|
|
58
|
+
): HostInputIngressCapability {
|
|
64
59
|
return {
|
|
65
60
|
attachGamepad: (source, sink) => attach('gamepad', source, sink),
|
|
66
61
|
attachKeyboard: (source, sink) => attach('keyboard', source, sink),
|
|
@@ -73,15 +68,13 @@ function createTestInputIngressBackend(
|
|
|
73
68
|
|
|
74
69
|
function expectInputAttachment(attach: typeof attachGamepadInput, expectedKind: InputIngressAttachmentKind): void {
|
|
75
70
|
const attachments: Array<Readonly<{ kind: InputIngressAttachmentKind; source: InputIngressSource }>> = [];
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}),
|
|
81
|
-
);
|
|
71
|
+
const backend = createTestInputIngressBackend((kind, source) => {
|
|
72
|
+
attachments.push({ kind, source });
|
|
73
|
+
return () => {};
|
|
74
|
+
});
|
|
82
75
|
const source = {};
|
|
83
76
|
|
|
84
|
-
attach(createInputManager(), source);
|
|
77
|
+
attach(backend, createInputManager(), source);
|
|
85
78
|
|
|
86
79
|
expect(attachments).toEqual([{ kind: expectedKind, source }]);
|
|
87
80
|
}
|
|
@@ -92,10 +85,10 @@ function expectInputDetachment(
|
|
|
92
85
|
expectedKind: InputIngressAttachmentKind,
|
|
93
86
|
): void {
|
|
94
87
|
const release = vi.fn();
|
|
95
|
-
|
|
88
|
+
const backend = createTestInputIngressBackend((kind) => (kind === expectedKind ? release : () => {}));
|
|
96
89
|
const manager = createInputManager();
|
|
97
90
|
const source = {};
|
|
98
|
-
attach(manager, source);
|
|
91
|
+
attach(backend, manager, source);
|
|
99
92
|
|
|
100
93
|
detach(manager, source);
|
|
101
94
|
|
|
@@ -123,7 +116,6 @@ describe('applyGamepadAxisDeadZone', () => {
|
|
|
123
116
|
});
|
|
124
117
|
|
|
125
118
|
it('is alias-safe (result is based on input, not out)', () => {
|
|
126
|
-
// pure function — no mutation concern, but verify correctness for a midpoint value
|
|
127
119
|
const mid = applyGamepadAxisDeadZone(0.6, 0.2);
|
|
128
120
|
expect(mid).toBeGreaterThan(0);
|
|
129
121
|
expect(mid).toBeLessThan(1);
|
|
@@ -163,12 +155,10 @@ describe('applyGamepadStickDeadZone', () => {
|
|
|
163
155
|
describe('attachGamepadInput', () => {
|
|
164
156
|
it('accepts native axis and button pushes without browser polling globals', () => {
|
|
165
157
|
let sink: InputIngressSink | null = null;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}),
|
|
171
|
-
);
|
|
158
|
+
const backend = createTestInputIngressBackend((kind, _source, attachedSink) => {
|
|
159
|
+
if (kind === 'gamepad') sink = attachedSink;
|
|
160
|
+
return () => {};
|
|
161
|
+
});
|
|
172
162
|
vi.stubGlobal('navigator', undefined);
|
|
173
163
|
vi.stubGlobal('requestAnimationFrame', undefined);
|
|
174
164
|
vi.stubGlobal('cancelAnimationFrame', undefined);
|
|
@@ -183,7 +173,7 @@ describe('attachGamepadInput', () => {
|
|
|
183
173
|
connectSignal(manager.onGamepadButtonUp, () => events.push('up'));
|
|
184
174
|
connectSignal(manager.onGamepadDisconnect, () => events.push('disconnect'));
|
|
185
175
|
|
|
186
|
-
attachGamepadInput(manager, {});
|
|
176
|
+
attachGamepadInput(backend, manager, {});
|
|
187
177
|
sink!.gamepadConnect({ gamepad: 2, id: 'Native Pad', mapping: 'raw' });
|
|
188
178
|
sink!.gamepadAxisMove({ axis: 1, gamepad: 2, timeStamp: 10, value: 0.75 });
|
|
189
179
|
sink!.gamepadButtonDown({ button: 3, gamepad: 2, timeStamp: 11, value: 1 });
|
|
@@ -297,107 +287,79 @@ describe('connectInputStateToInputManager', () => {
|
|
|
297
287
|
emitSignal(manager.onKeyDown, data);
|
|
298
288
|
expect(isInputKeyDown(state, KeyCode.A)).toBe(true);
|
|
299
289
|
|
|
300
|
-
emitSignal(manager.onKeyUp, data);
|
|
301
290
|
dispose();
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
emitSignal(manager.onKeyDown, data);
|
|
305
|
-
expect(isInputKeyDown(state, KeyCode.A)).toBe(false);
|
|
291
|
+
emitSignal(manager.onKeyUp, data);
|
|
292
|
+
expect(isInputKeyDown(state, KeyCode.A)).toBe(true);
|
|
306
293
|
});
|
|
307
294
|
});
|
|
308
295
|
|
|
309
296
|
describe('createInputKeyRepeatTimer', () => {
|
|
310
|
-
it('
|
|
311
|
-
vi.useFakeTimers();
|
|
312
|
-
const timer = createInputKeyRepeatTimer({ delay: 500, interval: 33 });
|
|
313
|
-
let count = 0;
|
|
314
|
-
timer.start(() => count++);
|
|
315
|
-
expect(count).toBe(1);
|
|
316
|
-
vi.useRealTimers();
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
it('fires repeat after delay and interval', () => {
|
|
320
|
-
vi.useFakeTimers();
|
|
321
|
-
const timer = createInputKeyRepeatTimer({ delay: 500, interval: 100 });
|
|
322
|
-
let count = 0;
|
|
323
|
-
timer.start(() => count++);
|
|
324
|
-
expect(count).toBe(1); // immediate
|
|
325
|
-
vi.advanceTimersByTime(500);
|
|
326
|
-
expect(count).toBe(2); // after delay
|
|
327
|
-
vi.advanceTimersByTime(100);
|
|
328
|
-
expect(count).toBe(3); // after first interval
|
|
329
|
-
vi.advanceTimersByTime(100);
|
|
330
|
-
expect(count).toBe(4); // after second interval
|
|
331
|
-
timer.stop();
|
|
332
|
-
vi.useRealTimers();
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
it('stops repeating after stop()', () => {
|
|
297
|
+
it('fires the callback immediately on start, then after delay and at interval', () => {
|
|
336
298
|
vi.useFakeTimers();
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
timer.start(() => count++);
|
|
355
|
-
expect(count).toBe(2); // two immediate fires
|
|
356
|
-
vi.useRealTimers();
|
|
299
|
+
try {
|
|
300
|
+
const timer = createInputKeyRepeatTimer({ delay: 500, interval: 33 });
|
|
301
|
+
const callback = vi.fn();
|
|
302
|
+
timer.start(callback);
|
|
303
|
+
expect(callback).toHaveBeenCalledOnce();
|
|
304
|
+
vi.advanceTimersByTime(499);
|
|
305
|
+
expect(callback).toHaveBeenCalledOnce();
|
|
306
|
+
vi.advanceTimersByTime(1);
|
|
307
|
+
expect(callback).toHaveBeenCalledTimes(2);
|
|
308
|
+
vi.advanceTimersByTime(33);
|
|
309
|
+
expect(callback).toHaveBeenCalledTimes(3);
|
|
310
|
+
timer.stop();
|
|
311
|
+
vi.advanceTimersByTime(1000);
|
|
312
|
+
expect(callback).toHaveBeenCalledTimes(3);
|
|
313
|
+
} finally {
|
|
314
|
+
vi.useRealTimers();
|
|
315
|
+
}
|
|
357
316
|
});
|
|
358
317
|
});
|
|
359
318
|
|
|
360
319
|
describe('createInputManager', () => {
|
|
361
|
-
it('
|
|
320
|
+
it('is enabled by default', () => {
|
|
362
321
|
const manager = createInputManager();
|
|
363
322
|
expect(manager.enabled).toBe(true);
|
|
364
|
-
expect(manager.onPointerDown).toBeDefined();
|
|
365
323
|
});
|
|
366
324
|
|
|
367
|
-
it('
|
|
325
|
+
it('emits nothing when disabled', () => {
|
|
368
326
|
const manager = createInputManager();
|
|
327
|
+
const events: string[] = [];
|
|
328
|
+
connectSignal(manager.onKeyDown, () => events.push('key'));
|
|
369
329
|
manager.enabled = false;
|
|
370
|
-
|
|
330
|
+
|
|
331
|
+
const backend = createTestInputIngressBackend((_kind, _src, sink) => {
|
|
332
|
+
sink.keyDown(createInputKeyboardData(KeyCode.A));
|
|
333
|
+
return () => {};
|
|
334
|
+
});
|
|
335
|
+
attachKeyboardInput(backend, manager, {});
|
|
336
|
+
expect(events).toEqual([]);
|
|
371
337
|
});
|
|
372
338
|
});
|
|
373
339
|
|
|
374
340
|
describe('createInputSignals', () => {
|
|
375
|
-
it('
|
|
341
|
+
it('creates all 15 signals', () => {
|
|
376
342
|
const signals = createInputSignals();
|
|
377
|
-
expect(signals.onGamepadAxisMove).toBeDefined();
|
|
378
|
-
expect(signals.onGamepadButtonDown).toBeDefined();
|
|
379
|
-
expect(signals.onGamepadButtonUp).toBeDefined();
|
|
380
|
-
expect(signals.onGamepadConnect).toBeDefined();
|
|
381
|
-
expect(signals.onGamepadDisconnect).toBeDefined();
|
|
382
343
|
expect(signals.onKeyDown).toBeDefined();
|
|
383
344
|
expect(signals.onKeyUp).toBeDefined();
|
|
384
|
-
expect(signals.onPointerCancel).toBeDefined();
|
|
385
345
|
expect(signals.onPointerDown).toBeDefined();
|
|
346
|
+
expect(signals.onPointerUp).toBeDefined();
|
|
386
347
|
expect(signals.onPointerMove).toBeDefined();
|
|
387
348
|
expect(signals.onPointerMoveRelative).toBeDefined();
|
|
388
|
-
expect(signals.
|
|
389
|
-
expect(signals.
|
|
349
|
+
expect(signals.onPointerCancel).toBeDefined();
|
|
350
|
+
expect(signals.onGamepadButtonDown).toBeDefined();
|
|
351
|
+
expect(signals.onGamepadButtonUp).toBeDefined();
|
|
352
|
+
expect(signals.onGamepadAxisMove).toBeDefined();
|
|
353
|
+
expect(signals.onGamepadConnect).toBeDefined();
|
|
354
|
+
expect(signals.onGamepadDisconnect).toBeDefined();
|
|
390
355
|
expect(signals.onTextInput).toBeDefined();
|
|
356
|
+
expect(signals.onTextEdit).toBeDefined();
|
|
391
357
|
expect(signals.onWheel).toBeDefined();
|
|
392
358
|
});
|
|
393
|
-
|
|
394
|
-
it('returns a new object each call', () => {
|
|
395
|
-
expect(createInputSignals()).not.toBe(createInputSignals());
|
|
396
|
-
});
|
|
397
359
|
});
|
|
398
360
|
|
|
399
361
|
describe('createInputState', () => {
|
|
400
|
-
it('
|
|
362
|
+
it('starts with empty maps and sets', () => {
|
|
401
363
|
const state = createInputState();
|
|
402
364
|
expect(state.keysDown.size).toBe(0);
|
|
403
365
|
expect(state.pointerButtonsDown.size).toBe(0);
|
|
@@ -411,71 +373,153 @@ describe('createInputState', () => {
|
|
|
411
373
|
});
|
|
412
374
|
|
|
413
375
|
describe('detachGamepadInput', () => {
|
|
414
|
-
it('releases the
|
|
376
|
+
it('releases the attachment', () => {
|
|
415
377
|
expectInputDetachment(attachGamepadInput, detachGamepadInput, 'gamepad');
|
|
416
378
|
});
|
|
417
379
|
});
|
|
418
380
|
|
|
419
381
|
describe('detachKeyboardInput', () => {
|
|
420
|
-
it('releases the
|
|
382
|
+
it('releases the attachment', () => {
|
|
421
383
|
expectInputDetachment(attachKeyboardInput, detachKeyboardInput, 'keyboard');
|
|
422
384
|
});
|
|
423
385
|
});
|
|
424
386
|
|
|
425
387
|
describe('detachPointerInput', () => {
|
|
426
|
-
it('releases the
|
|
388
|
+
it('releases the attachment', () => {
|
|
427
389
|
expectInputDetachment(attachPointerInput, detachPointerInput, 'pointer');
|
|
428
390
|
});
|
|
429
391
|
});
|
|
430
392
|
|
|
431
393
|
describe('detachRelativePointerInput', () => {
|
|
432
|
-
it('releases the
|
|
394
|
+
it('releases the attachment', () => {
|
|
433
395
|
expectInputDetachment(attachRelativePointerInput, detachRelativePointerInput, 'relativePointer');
|
|
434
396
|
});
|
|
435
397
|
});
|
|
436
398
|
|
|
437
399
|
describe('detachTextInput', () => {
|
|
438
|
-
it('releases the
|
|
400
|
+
it('releases the attachment', () => {
|
|
439
401
|
expectInputDetachment(attachTextInput, detachTextInput, 'text');
|
|
440
402
|
});
|
|
441
403
|
});
|
|
442
404
|
|
|
443
405
|
describe('detachWheelInput', () => {
|
|
444
|
-
it('releases the
|
|
406
|
+
it('releases the attachment', () => {
|
|
445
407
|
expectInputDetachment(attachWheelInput, detachWheelInput, 'wheel');
|
|
446
408
|
});
|
|
447
409
|
});
|
|
448
410
|
|
|
449
411
|
describe('endInputStateFrame', () => {
|
|
450
|
-
it('clears all
|
|
451
|
-
const manager = createInputManager();
|
|
412
|
+
it('clears all four edge sets', () => {
|
|
452
413
|
const state = createInputState();
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
414
|
+
state.justPressedKeys.add(1);
|
|
415
|
+
state.justReleasedKeys.add(2);
|
|
416
|
+
state.justPressedGamepadButtons.add(3);
|
|
417
|
+
state.justReleasedGamepadButtons.add(4);
|
|
458
418
|
endInputStateFrame(state);
|
|
459
419
|
expect(state.justPressedKeys.size).toBe(0);
|
|
460
420
|
expect(state.justReleasedKeys.size).toBe(0);
|
|
461
421
|
expect(state.justPressedGamepadButtons.size).toBe(0);
|
|
462
422
|
expect(state.justReleasedGamepadButtons.size).toBe(0);
|
|
463
423
|
});
|
|
424
|
+
});
|
|
464
425
|
|
|
465
|
-
|
|
426
|
+
describe('explicit input ingress parameter', () => {
|
|
427
|
+
it('passes each exact source identity through all six attachment families and releases each once', () => {
|
|
428
|
+
const attachments: Array<Readonly<{ kind: InputIngressAttachmentKind; source: InputIngressSource }>> = [];
|
|
429
|
+
const releases = new Map<InputIngressAttachmentKind, ReturnType<typeof vi.fn>>();
|
|
430
|
+
const backend = createTestInputIngressBackend((kind, source) => {
|
|
431
|
+
attachments.push({ kind, source });
|
|
432
|
+
const release = vi.fn();
|
|
433
|
+
releases.set(kind, release);
|
|
434
|
+
return release;
|
|
435
|
+
});
|
|
466
436
|
const manager = createInputManager();
|
|
467
|
-
const
|
|
468
|
-
|
|
437
|
+
const sources = {
|
|
438
|
+
gamepad: {},
|
|
439
|
+
keyboard: {},
|
|
440
|
+
pointer: {},
|
|
441
|
+
relativePointer: {},
|
|
442
|
+
text: {},
|
|
443
|
+
wheel: {},
|
|
444
|
+
} satisfies Record<InputIngressAttachmentKind, InputIngressSource>;
|
|
469
445
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
446
|
+
attachGamepadInput(backend, manager, sources.gamepad);
|
|
447
|
+
attachKeyboardInput(backend, manager, sources.keyboard);
|
|
448
|
+
attachPointerInput(backend, manager, sources.pointer);
|
|
449
|
+
attachRelativePointerInput(backend, manager, sources.relativePointer);
|
|
450
|
+
attachTextInput(backend, manager, sources.text);
|
|
451
|
+
attachWheelInput(backend, manager, sources.wheel);
|
|
452
|
+
|
|
453
|
+
expect(attachments).toEqual([
|
|
454
|
+
{ kind: 'gamepad', source: sources.gamepad },
|
|
455
|
+
{ kind: 'keyboard', source: sources.keyboard },
|
|
456
|
+
{ kind: 'pointer', source: sources.pointer },
|
|
457
|
+
{ kind: 'relativePointer', source: sources.relativePointer },
|
|
458
|
+
{ kind: 'text', source: sources.text },
|
|
459
|
+
{ kind: 'wheel', source: sources.wheel },
|
|
460
|
+
]);
|
|
461
|
+
|
|
462
|
+
detachGamepadInput(manager, sources.gamepad);
|
|
463
|
+
detachKeyboardInput(manager, sources.keyboard);
|
|
464
|
+
detachPointerInput(manager, sources.pointer);
|
|
465
|
+
detachRelativePointerInput(manager, sources.relativePointer);
|
|
466
|
+
detachTextInput(manager, sources.text);
|
|
467
|
+
detachWheelInput(manager, sources.wheel);
|
|
468
|
+
detachGamepadInput(manager, sources.gamepad);
|
|
469
|
+
detachKeyboardInput(manager, sources.keyboard);
|
|
470
|
+
detachPointerInput(manager, sources.pointer);
|
|
471
|
+
detachRelativePointerInput(manager, sources.relativePointer);
|
|
472
|
+
detachTextInput(manager, sources.text);
|
|
473
|
+
detachWheelInput(manager, sources.wheel);
|
|
474
|
+
|
|
475
|
+
expect([...releases.values()].every((release) => release.mock.calls.length === 1)).toBe(true);
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
it('pins cleanup to the originating backend and never destroys the borrowed source', () => {
|
|
479
|
+
const releaseA = vi.fn();
|
|
480
|
+
const releaseB = vi.fn();
|
|
481
|
+
const backendA = createTestInputIngressBackend((kind) => (kind === 'keyboard' ? releaseA : vi.fn()));
|
|
482
|
+
const backendB = createTestInputIngressBackend((kind) => (kind === 'keyboard' ? releaseB : vi.fn()));
|
|
483
|
+
const source = { destroy: vi.fn() };
|
|
484
|
+
const manager = createInputManager();
|
|
485
|
+
|
|
486
|
+
attachKeyboardInput(backendA, manager, source);
|
|
487
|
+
attachKeyboardInput(backendB, manager, source);
|
|
488
|
+
detachKeyboardInput(manager, source);
|
|
489
|
+
detachKeyboardInput(manager, source);
|
|
490
|
+
|
|
491
|
+
expect(releaseA).toHaveBeenCalledOnce();
|
|
492
|
+
expect(releaseB).toHaveBeenCalledOnce();
|
|
493
|
+
expect(source.destroy).not.toHaveBeenCalled();
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
it('releases the old origin once when the same source is reattached with a different backend', () => {
|
|
497
|
+
const releaseA = vi.fn();
|
|
498
|
+
const releaseB = vi.fn();
|
|
499
|
+
const source = {};
|
|
500
|
+
const manager = createInputManager();
|
|
501
|
+
|
|
502
|
+
attachPointerInput(
|
|
503
|
+
createTestInputIngressBackend(() => releaseA),
|
|
504
|
+
manager,
|
|
505
|
+
source,
|
|
506
|
+
);
|
|
507
|
+
attachPointerInput(
|
|
508
|
+
createTestInputIngressBackend(() => releaseB),
|
|
509
|
+
manager,
|
|
510
|
+
source,
|
|
511
|
+
);
|
|
512
|
+
expect(releaseA).toHaveBeenCalledOnce();
|
|
513
|
+
|
|
514
|
+
detachPointerInput(manager, source);
|
|
515
|
+
detachPointerInput(manager, source);
|
|
516
|
+
expect(releaseA).toHaveBeenCalledOnce();
|
|
517
|
+
expect(releaseB).toHaveBeenCalledOnce();
|
|
474
518
|
});
|
|
475
519
|
});
|
|
476
520
|
|
|
477
521
|
describe('getGamepadAxisName', () => {
|
|
478
|
-
it('
|
|
522
|
+
it('maps standard indices to GamepadAxisKind values', () => {
|
|
479
523
|
expect(getGamepadAxisName('standard', 0)).toBe(GamepadAxisKind.STICK_LEFT_X);
|
|
480
524
|
expect(getGamepadAxisName('standard', 1)).toBe(GamepadAxisKind.STICK_LEFT_Y);
|
|
481
525
|
expect(getGamepadAxisName('standard', 2)).toBe(GamepadAxisKind.STICK_RIGHT_X);
|
|
@@ -486,14 +530,10 @@ describe('getGamepadAxisName', () => {
|
|
|
486
530
|
expect(getGamepadAxisName('raw', 0)).toBeNull();
|
|
487
531
|
expect(getGamepadAxisName('', 0)).toBeNull();
|
|
488
532
|
});
|
|
489
|
-
|
|
490
|
-
it('returns null for an out-of-range index', () => {
|
|
491
|
-
expect(getGamepadAxisName('standard', 99)).toBeNull();
|
|
492
|
-
});
|
|
493
533
|
});
|
|
494
534
|
|
|
495
535
|
describe('getGamepadButtonName', () => {
|
|
496
|
-
it('
|
|
536
|
+
it('maps standard indices to GamepadButtonKind values', () => {
|
|
497
537
|
expect(getGamepadButtonName('standard', 0)).toBe(GamepadButtonKind.BUTTON_SOUTH);
|
|
498
538
|
expect(getGamepadButtonName('standard', 12)).toBe(GamepadButtonKind.DPAD_UP);
|
|
499
539
|
expect(getGamepadButtonName('standard', 16)).toBe(GamepadButtonKind.HOME);
|
|
@@ -516,25 +556,6 @@ describe('getInputGamepadAxis', () => {
|
|
|
516
556
|
});
|
|
517
557
|
});
|
|
518
558
|
|
|
519
|
-
describe('getInputIngressBackend', () => {
|
|
520
|
-
it('uses one stable portable fallback', () => {
|
|
521
|
-
const fallback = getInputIngressBackend();
|
|
522
|
-
expect(getInputIngressBackend()).toBe(fallback);
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
it('returns inert releases for every attachment family when no provider is installed', () => {
|
|
526
|
-
const fallback = getInputIngressBackend();
|
|
527
|
-
const source = {};
|
|
528
|
-
const sink = {} as InputIngressSink;
|
|
529
|
-
expect(() => fallback.attachGamepad(source, sink)()).not.toThrow();
|
|
530
|
-
expect(() => fallback.attachKeyboard(source, sink)()).not.toThrow();
|
|
531
|
-
expect(() => fallback.attachPointer(source, sink)()).not.toThrow();
|
|
532
|
-
expect(() => fallback.attachRelativePointer(source, sink)()).not.toThrow();
|
|
533
|
-
expect(() => fallback.attachText(source, sink)()).not.toThrow();
|
|
534
|
-
expect(() => fallback.attachWheel(source, sink)()).not.toThrow();
|
|
535
|
-
});
|
|
536
|
-
});
|
|
537
|
-
|
|
538
559
|
describe('initializeInputKeyRepeatTimer', () => {
|
|
539
560
|
it('is the construction initializer of createInputKeyRepeatTimer', () => {
|
|
540
561
|
expect(typeof initializeInputKeyRepeatTimer).toBe('function');
|
|
@@ -559,15 +580,6 @@ describe('initializeInputState', () => {
|
|
|
559
580
|
});
|
|
560
581
|
});
|
|
561
582
|
|
|
562
|
-
describe('installInputIngressHostBackend', () => {
|
|
563
|
-
it('preserves the first installed host identity', () => {
|
|
564
|
-
const firstHost = createTestInputIngressBackend();
|
|
565
|
-
installInputIngressHostBackend(firstHost);
|
|
566
|
-
installInputIngressHostBackend(createTestInputIngressBackend());
|
|
567
|
-
expect(getInputIngressBackend()).toBe(firstHost);
|
|
568
|
-
});
|
|
569
|
-
});
|
|
570
|
-
|
|
571
583
|
describe('isInputGamepadButtonDown', () => {
|
|
572
584
|
it('returns false for an unknown gamepad/button combination', () => {
|
|
573
585
|
const state = createInputState();
|
|
@@ -589,119 +601,6 @@ describe('isInputPointerButtonDown', () => {
|
|
|
589
601
|
});
|
|
590
602
|
});
|
|
591
603
|
|
|
592
|
-
describe('resetInputIngressBackendForTest', () => {
|
|
593
|
-
it('clears custom and host slots back to the portable fallback', () => {
|
|
594
|
-
const fallback = getInputIngressBackend();
|
|
595
|
-
installInputIngressHostBackend(createTestInputIngressBackend());
|
|
596
|
-
setInputIngressBackend(createTestInputIngressBackend());
|
|
597
|
-
|
|
598
|
-
resetInputIngressBackendForTest();
|
|
599
|
-
expect(getInputIngressBackend()).toBe(fallback);
|
|
600
|
-
});
|
|
601
|
-
});
|
|
602
|
-
|
|
603
|
-
describe('setInputIngressBackend', () => {
|
|
604
|
-
it('gives a custom backend precedence and reveals the installed host when cleared', () => {
|
|
605
|
-
const firstHost = createTestInputIngressBackend();
|
|
606
|
-
installInputIngressHostBackend(firstHost);
|
|
607
|
-
const custom = createTestInputIngressBackend();
|
|
608
|
-
setInputIngressBackend(custom);
|
|
609
|
-
expect(getInputIngressBackend()).toBe(custom);
|
|
610
|
-
setInputIngressBackend(null);
|
|
611
|
-
expect(getInputIngressBackend()).toBe(firstHost);
|
|
612
|
-
});
|
|
613
|
-
|
|
614
|
-
it('passes each exact source identity through all six attachment families and releases each once', () => {
|
|
615
|
-
const attachments: Array<Readonly<{ kind: InputIngressAttachmentKind; source: InputIngressSource }>> = [];
|
|
616
|
-
const releases = new Map<InputIngressAttachmentKind, ReturnType<typeof vi.fn>>();
|
|
617
|
-
setInputIngressBackend(
|
|
618
|
-
createTestInputIngressBackend((kind, source) => {
|
|
619
|
-
attachments.push({ kind, source });
|
|
620
|
-
const release = vi.fn();
|
|
621
|
-
releases.set(kind, release);
|
|
622
|
-
return release;
|
|
623
|
-
}),
|
|
624
|
-
);
|
|
625
|
-
const manager = createInputManager();
|
|
626
|
-
const sources = {
|
|
627
|
-
gamepad: {},
|
|
628
|
-
keyboard: {},
|
|
629
|
-
pointer: {},
|
|
630
|
-
relativePointer: {},
|
|
631
|
-
text: {},
|
|
632
|
-
wheel: {},
|
|
633
|
-
} satisfies Record<InputIngressAttachmentKind, InputIngressSource>;
|
|
634
|
-
|
|
635
|
-
attachGamepadInput(manager, sources.gamepad);
|
|
636
|
-
attachKeyboardInput(manager, sources.keyboard);
|
|
637
|
-
attachPointerInput(manager, sources.pointer);
|
|
638
|
-
attachRelativePointerInput(manager, sources.relativePointer);
|
|
639
|
-
attachTextInput(manager, sources.text);
|
|
640
|
-
attachWheelInput(manager, sources.wheel);
|
|
641
|
-
|
|
642
|
-
expect(attachments).toEqual([
|
|
643
|
-
{ kind: 'gamepad', source: sources.gamepad },
|
|
644
|
-
{ kind: 'keyboard', source: sources.keyboard },
|
|
645
|
-
{ kind: 'pointer', source: sources.pointer },
|
|
646
|
-
{ kind: 'relativePointer', source: sources.relativePointer },
|
|
647
|
-
{ kind: 'text', source: sources.text },
|
|
648
|
-
{ kind: 'wheel', source: sources.wheel },
|
|
649
|
-
]);
|
|
650
|
-
|
|
651
|
-
detachGamepadInput(manager, sources.gamepad);
|
|
652
|
-
detachKeyboardInput(manager, sources.keyboard);
|
|
653
|
-
detachPointerInput(manager, sources.pointer);
|
|
654
|
-
detachRelativePointerInput(manager, sources.relativePointer);
|
|
655
|
-
detachTextInput(manager, sources.text);
|
|
656
|
-
detachWheelInput(manager, sources.wheel);
|
|
657
|
-
detachGamepadInput(manager, sources.gamepad);
|
|
658
|
-
detachKeyboardInput(manager, sources.keyboard);
|
|
659
|
-
detachPointerInput(manager, sources.pointer);
|
|
660
|
-
detachRelativePointerInput(manager, sources.relativePointer);
|
|
661
|
-
detachTextInput(manager, sources.text);
|
|
662
|
-
detachWheelInput(manager, sources.wheel);
|
|
663
|
-
|
|
664
|
-
expect([...releases.values()].every((release) => release.mock.calls.length === 1)).toBe(true);
|
|
665
|
-
});
|
|
666
|
-
|
|
667
|
-
it('pins cleanup to the originating backend and never destroys the borrowed source', () => {
|
|
668
|
-
const releaseA = vi.fn();
|
|
669
|
-
const releaseB = vi.fn();
|
|
670
|
-
const backendA = createTestInputIngressBackend((kind) => (kind === 'keyboard' ? releaseA : vi.fn()));
|
|
671
|
-
const backendB = createTestInputIngressBackend((kind) => (kind === 'keyboard' ? releaseB : vi.fn()));
|
|
672
|
-
const source = { destroy: vi.fn() };
|
|
673
|
-
const manager = createInputManager();
|
|
674
|
-
|
|
675
|
-
setInputIngressBackend(backendA);
|
|
676
|
-
attachKeyboardInput(manager, source);
|
|
677
|
-
setInputIngressBackend(backendB);
|
|
678
|
-
detachKeyboardInput(manager, source);
|
|
679
|
-
detachKeyboardInput(manager, source);
|
|
680
|
-
|
|
681
|
-
expect(releaseA).toHaveBeenCalledOnce();
|
|
682
|
-
expect(releaseB).not.toHaveBeenCalled();
|
|
683
|
-
expect(source.destroy).not.toHaveBeenCalled();
|
|
684
|
-
});
|
|
685
|
-
|
|
686
|
-
it('releases the old origin once when the same source is reattached after backend replacement', () => {
|
|
687
|
-
const releaseA = vi.fn();
|
|
688
|
-
const releaseB = vi.fn();
|
|
689
|
-
const source = {};
|
|
690
|
-
const manager = createInputManager();
|
|
691
|
-
|
|
692
|
-
setInputIngressBackend(createTestInputIngressBackend(() => releaseA));
|
|
693
|
-
attachPointerInput(manager, source);
|
|
694
|
-
setInputIngressBackend(createTestInputIngressBackend(() => releaseB));
|
|
695
|
-
attachPointerInput(manager, source);
|
|
696
|
-
expect(releaseA).toHaveBeenCalledOnce();
|
|
697
|
-
|
|
698
|
-
detachPointerInput(manager, source);
|
|
699
|
-
detachPointerInput(manager, source);
|
|
700
|
-
expect(releaseA).toHaveBeenCalledOnce();
|
|
701
|
-
expect(releaseB).toHaveBeenCalledOnce();
|
|
702
|
-
});
|
|
703
|
-
});
|
|
704
|
-
|
|
705
604
|
function createInputKeyboardData(keyCode: number): InputKeyboardData {
|
|
706
605
|
return {
|
|
707
606
|
altKey: false,
|
|
@@ -768,9 +667,6 @@ describe('wasInputGamepadButtonPressed', () => {
|
|
|
768
667
|
expect(wasInputGamepadButtonPressed(state, 0, 0)).toBe(false);
|
|
769
668
|
});
|
|
770
669
|
|
|
771
|
-
// Driven by emitting the signal because the Web adapter already edge-detects and cannot produce a
|
|
772
|
-
// repeat. A native backend reporting held buttons every poll can, and these signals are public —
|
|
773
|
-
// which is why the guard belongs on the state machine.
|
|
774
670
|
it('returns false when a held button is reported down again', () => {
|
|
775
671
|
const manager = createInputManager();
|
|
776
672
|
const state = createInputState();
|
|
@@ -807,11 +703,9 @@ describe('wasInputGamepadButtonReleased', () => {
|
|
|
807
703
|
const state = createInputState();
|
|
808
704
|
connectInputStateToInputManager(state, manager);
|
|
809
705
|
|
|
810
|
-
// Press the button first.
|
|
811
706
|
emitSignal(manager.onGamepadButtonDown, { button: 0, gamepad: 0, timeStamp: 1, value: 1 });
|
|
812
707
|
endInputStateFrame(state);
|
|
813
708
|
|
|
814
|
-
// Release it.
|
|
815
709
|
emitSignal(manager.onGamepadButtonUp, { button: 0, gamepad: 0, timeStamp: 2, value: 0 });
|
|
816
710
|
|
|
817
711
|
expect(wasInputGamepadButtonReleased(state, 0, 0)).toBe(true);
|
|
@@ -843,8 +737,6 @@ describe('wasInputKeyPressed', () => {
|
|
|
843
737
|
expect(wasInputKeyPressed(state, KeyCode.A)).toBe(false);
|
|
844
738
|
});
|
|
845
739
|
|
|
846
|
-
// The DOM re-fires keydown while a key is held. Only the first is an up→down transition, so a held
|
|
847
|
-
// key must not keep reporting a press — otherwise anything that fires on press autofires.
|
|
848
740
|
it('returns false for the auto-repeat keydowns of a key that is still held', () => {
|
|
849
741
|
const manager = createInputManager();
|
|
850
742
|
const state = createInputState();
|
|
@@ -860,8 +752,6 @@ describe('wasInputKeyPressed', () => {
|
|
|
860
752
|
expect(isInputKeyDown(state, KeyCode.A)).toBe(true);
|
|
861
753
|
});
|
|
862
754
|
|
|
863
|
-
// A tap that starts and ends between two frames still contains a real press; reporting only the
|
|
864
|
-
// release would swallow the input rather than delay it.
|
|
865
755
|
it('returns true for a key pressed and released within the same frame', () => {
|
|
866
756
|
const manager = createInputManager();
|
|
867
757
|
const state = createInputState();
|
|
@@ -876,8 +766,6 @@ describe('wasInputKeyPressed', () => {
|
|
|
876
766
|
expect(isInputKeyDown(state, KeyCode.A)).toBe(false);
|
|
877
767
|
});
|
|
878
768
|
|
|
879
|
-
// Re-pressing after a release inside one frame is a second up→down transition, and leaves the key
|
|
880
|
-
// held — so the frame reports a press, a release, and a key that is still down.
|
|
881
769
|
it('returns true for a key released and pressed again within the same frame', () => {
|
|
882
770
|
const manager = createInputManager();
|
|
883
771
|
const state = createInputState();
|