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), ); });});
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),
);
});
});