248 lines · 6.7 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test";import type { ResolvedKeybindingsConfig } from "@t3tools/contracts"; import {  buildKeybindingRows,  buildKeybindingCommandOptions,  buildWhenVariableOptions,  commandLabel,  keybindingConflictLabels,  keybindingFromKeyboardEvent,  parseWhenExpressionDraft,  shortcutToKeybindingInput,  unknownWhenVariables,  whenAstToExpression,} from "./KeybindingsSettings.logic"; describe("KeybindingsSettings.logic", () => {  it("builds searchable rows with readable key and when values", () => {    const rows = buildKeybindingRows(      [        {          command: "terminal.toggle",          shortcut: {            key: "j",            modKey: true,            metaKey: false,            ctrlKey: false,            altKey: false,            shiftKey: false,          },          whenAst: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },        },      ] satisfies ResolvedKeybindingsConfig,      "terminal",    );     expect(rows).toEqual([      expect.objectContaining({        command: "terminal.toggle",        key: "mod+j",        when: "!terminalFocus",        defaultKey: "mod+j",        defaultWhen: "",        source: "Custom",      }),    ]);  });   it("captures platform-specific mod shortcuts", () => {    expect(      keybindingFromKeyboardEvent(        { key: "K", metaKey: true, ctrlKey: false, altKey: false, shiftKey: true },        "MacIntel",      ),    ).toBe("mod+shift+k");    expect(      keybindingFromKeyboardEvent(        { key: "K", metaKey: false, ctrlKey: true, altKey: false, shiftKey: true },        "Win32",      ),    ).toBe("mod+shift+k");  });   it("serializes shortcuts and when expressions for upserts", () => {    expect(      shortcutToKeybindingInput({        key: " ",        modKey: true,        metaKey: false,        ctrlKey: false,        altKey: true,        shiftKey: false,      }),    ).toBe("mod+alt+space");     expect(      whenAstToExpression({        type: "and",        left: { type: "identifier", name: "editorFocus" },        right: {          type: "not",          node: { type: "identifier", name: "terminalFocus" },        },      }),    ).toBe("editorFocus && !terminalFocus");     expect(parseWhenExpressionDraft("editorFocus && (!terminalFocus || modelPickerOpen)")).toEqual({      ok: true,      value: {        type: "and",        left: { type: "identifier", name: "editorFocus" },        right: {          type: "or",          left: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },          right: { type: "identifier", name: "modelPickerOpen" },        },      },    });    expect(parseWhenExpressionDraft("editorFocus &&")).toEqual({      ok: false,      message: "Use variables with !, &&, ||, and parentheses.",    });     expect(parseWhenExpressionDraft("!(terminalFocus || modelPickerOpen)")).toEqual({      ok: true,      value: {        type: "not",        node: {          type: "or",          left: { type: "identifier", name: "terminalFocus" },          right: { type: "identifier", name: "modelPickerOpen" },        },      },    });  });   it("formats static and project script command labels", () => {    expect(commandLabel("commandPalette.toggle")).toBe("Command Palette: Toggle");    expect(commandLabel("script.setup-db.run")).toBe("Run Script: Setup Db");  });   it("builds known when variable options from defaults without frontend labels", () => {    const options = buildWhenVariableOptions();     expect(options).toEqual(      expect.arrayContaining(["terminalFocus", "terminalOpen", "modelPickerOpen", "true", "false"]),    );    expect(options).not.toContain("customModeActive");  });   it("builds command options from defaults and resolved project bindings", () => {    const options = buildKeybindingCommandOptions([      {        command: "script.setup-db.run",        shortcut: {          key: "r",          modKey: true,          metaKey: false,          ctrlKey: false,          altKey: false,          shiftKey: false,        },      },    ] satisfies ResolvedKeybindingsConfig);     expect(options).toEqual(expect.arrayContaining(["chat.new", "script.setup-db.run"]));  });   it("reports unknown when variables without rejecting parseable expressions", () => {    const parsed = parseWhenExpressionDraft("!terminalFocus && terminalFoc");     expect(parsed.ok).toBe(true);    expect(unknownWhenVariables(parsed.ok ? parsed.value : undefined)).toEqual(["terminalFoc"]);  });   it("marks each default shortcut for multi-binding commands as default", () => {    const rows = buildKeybindingRows(      [        {          command: "chat.new",          shortcut: {            key: "n",            modKey: true,            metaKey: false,            ctrlKey: false,            altKey: false,            shiftKey: false,          },          whenAst: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },        },        {          command: "chat.new",          shortcut: {            key: "o",            modKey: true,            metaKey: false,            ctrlKey: false,            altKey: false,            shiftKey: true,          },          whenAst: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },        },      ] satisfies ResolvedKeybindingsConfig,      "",    );     expect(rows.map((row) => row.source)).toEqual(["Default", "Default"]);  });   it("reports conflicting shortcuts that share an active when context", () => {    const rows = buildKeybindingRows(      [        {          command: "chat.new",          shortcut: {            key: "n",            modKey: true,            metaKey: false,            ctrlKey: false,            altKey: false,            shiftKey: false,          },          whenAst: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },        },        {          command: "chat.newLocal",          shortcut: {            key: "n",            modKey: true,            metaKey: false,            ctrlKey: false,            altKey: false,            shiftKey: false,          },          whenAst: {            type: "not",            node: { type: "identifier", name: "terminalFocus" },          },        },      ] satisfies ResolvedKeybindingsConfig,      "",    );     expect(rows[0]?.conflicts).toEqual(["Chat: New Local"]);    expect(      keybindingConflictLabels(rows, {        rowId: rows[0]?.id ?? "",        key: "mod+n",        when: "",      }),    ).toEqual(["Chat: New Local"]);  });});