53 lines · 2.1 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test"; import { ghosttyKeyForCode, ghosttyUnshiftedCodepoint } from "./keyCodes"; describe("ghosttyKeyForCode", () => {  it("keeps the tail of the pinned Ghostty key enum in order", () => {    expect(ghosttyKeyForCode("F25")).toBe(ghosttyKeyForCode("F24") + 1);    expect(ghosttyKeyForCode("PrintScreen")).toBe(ghosttyKeyForCode("FnLock") + 1);    expect(ghosttyKeyForCode("Pause")).toBe(ghosttyKeyForCode("ScrollLock") + 1);    expect(ghosttyKeyForCode("Paste")).toBe(ghosttyKeyForCode("Cut") + 1);  });}); describe("ghosttyUnshiftedCodepoint", () => {  it("provides the logical base character for Kitty keyboard encoding", () => {    expect(ghosttyUnshiftedCodepoint({ code: "KeyC", key: "c", shiftKey: false })).toBe(      "c".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "KeyC", key: "C", shiftKey: true })).toBe(      "c".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "Digit1", key: "!", shiftKey: true })).toBe(      "1".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "Slash", key: "?", shiftKey: true })).toBe(      "/".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "Digit1", key: "&", shiftKey: false })).toBe(      "&".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "Enter", key: "Enter", shiftKey: false })).toBe(0);  });   it("reports unknown instead of the shifted character without layout data", () => {    expect(ghosttyUnshiftedCodepoint({ code: "Digit7", key: "/", shiftKey: true })).toBe(0);    expect(ghosttyUnshiftedCodepoint({ code: "KeyD", key: "Д", shiftKey: true })).toBe(      "д".codePointAt(0),    );  });   it("prefers the active browser layout over US physical key positions", () => {    const layoutMap = new Map([      ["Digit1", "&"],      ["KeyC", "j"],    ]);    expect(ghosttyUnshiftedCodepoint({ code: "Digit1", key: "1", shiftKey: true }, layoutMap)).toBe(      "&".codePointAt(0),    );    expect(ghosttyUnshiftedCodepoint({ code: "KeyC", key: "J", shiftKey: true }, layoutMap)).toBe(      "j".codePointAt(0),    );  });});