返回 DeepSeek-Reasonix
keys.test.ts
根目录 / desktop / electron / src / main / browser / keys.test.ts
1 import assert from "node:assert/strict";
2 import { test } from "node:test";
3 import { chordEvents, parseChord, parseKeySequence } from "./keys.js";
4
5 test("chords map DOM key names and modifiers onto Electron key codes", () => {
6 assert.deepEqual(parseChord("Control+Shift+Enter"), { keyCode: "Return", modifiers: ["control", "shift"], char: null });
7 assert.deepEqual(parseChord("Meta+a"), { keyCode: "a", modifiers: ["meta"], char: null });
8 assert.deepEqual(parseChord("Escape"), { keyCode: "Escape", modifiers: [], char: null });
9 assert.deepEqual(parseChord("ArrowDown"), { keyCode: "Down", modifiers: [], char: null });
10 assert.deepEqual(parseChord("Enter"), { keyCode: "Return", modifiers: [], char: "\r" });
11 assert.deepEqual(parseChord("Tab"), { keyCode: "Tab", modifiers: [], char: "\t" });
12 assert.deepEqual(parseChord("a"), { keyCode: "a", modifiers: [], char: "a" });
13 assert.deepEqual(parseChord("Shift+a"), { keyCode: "a", modifiers: ["shift"], char: "A" });
14 assert.deepEqual(parseChord("ctrl+alt+Delete"), { keyCode: "Delete", modifiers: ["control", "alt"], char: null });
15 assert.deepEqual(parseChord("Shift++"), { keyCode: "Plus", modifiers: ["shift"], char: "+" });
16 assert.deepEqual(parseChord("+"), { keyCode: "Plus", modifiers: [], char: "+" });
17 assert.deepEqual(parseChord("F5"), { keyCode: "F5", modifiers: [], char: null });
18 assert.deepEqual(parseChord("pageDown"), { keyCode: "PageDown", modifiers: [], char: null });
19 assert.throws(() => parseChord(""), /empty/);
20 assert.throws(() => parseChord("Control+"), /malformed/);
21 assert.throws(() => parseChord("a+b"), /more than one key/);
22 assert.throws(() => parseChord("Control+Shift"), /no key/);
23 });
24
25 test("key sequences are space separated and expand to keyDown/char/keyUp", () => {
26 const chords = parseKeySequence("Control+a Backspace Enter");
27 assert.deepEqual(chords.map((chord) => chord.keyCode), ["a", "Backspace", "Return"]);
28 assert.deepEqual(chordEvents(chords[0]), [
29 { type: "keyDown", keyCode: "a", modifiers: ["control"] },
30 { type: "keyUp", keyCode: "a", modifiers: ["control"] },
31 ]);
32 assert.deepEqual(chordEvents(chords[2]), [
33 { type: "keyDown", keyCode: "Return", modifiers: undefined },
34 { type: "char", keyCode: "\r", modifiers: undefined },
35 { type: "keyUp", keyCode: "Return", modifiers: undefined },
36 ]);
37 assert.deepEqual(parseKeySequence(" "), []);
38 });
39
39 lines TYPESCRIPT