mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-09-24 15:49:09 +00:00
0222736349
When the keyboard shortcut scheme is off, snippet recording still treated default Mac and PC bindings as occupied. Conflict checks now use only bindings that can actually fire, and the error names the conflicting action. Closes #3025
50 lines
1.9 KiB
TypeScript
50 lines
1.9 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
|
|
import { getQuickAddSnippetInitialCommand } from "./QuickAddSnippetDialog.tsx";
|
|
|
|
const source = readFileSync(new URL("./QuickAddSnippetDialog.tsx", import.meta.url), "utf8");
|
|
|
|
test("quick add snippet event can prefill command", () => {
|
|
const event = {
|
|
detail: { command: "ls -la\npwd" },
|
|
} as CustomEvent<{ command?: string }>;
|
|
|
|
assert.equal(getQuickAddSnippetInitialCommand(event), "ls -la\npwd");
|
|
});
|
|
|
|
test("quick add snippet event defaults to an empty command", () => {
|
|
assert.equal(getQuickAddSnippetInitialCommand({} as Event), "");
|
|
assert.equal(
|
|
getQuickAddSnippetInitialCommand({
|
|
detail: { command: 123 },
|
|
} as unknown as Event),
|
|
"",
|
|
);
|
|
});
|
|
|
|
test("quick add snippet form binds shortkeys and uses a centered Dialog modal", () => {
|
|
assert.match(source, /DialogContent/);
|
|
assert.match(source, /from '\.\/ui\/dialog'/);
|
|
assert.doesNotMatch(source, /AsidePanel/);
|
|
assert.match(source, /snippets\.field\.shortkey/);
|
|
assert.match(source, /findActiveSystemShortcutConflict/);
|
|
assert.match(source, /keyEventToString/);
|
|
assert.match(source, /shortkey: shortkey \|\| undefined/);
|
|
assert.match(source, /if \(e\.defaultPrevented\) return/);
|
|
// Escape while recording a shortkey cancels capture instead of closing
|
|
assert.match(source, /onEscapeKeyDown/);
|
|
assert.match(source, /isRecordingShortkey/);
|
|
// Pointer dismissals must close even while recording (no stale-recording gate)
|
|
assert.doesNotMatch(
|
|
source,
|
|
/if\s*\(\s*isRecordingShortkey\s*\)\s*\{\s*setIsRecordingShortkey\(false\);\s*setShortkeyError\(null\);\s*return;/,
|
|
);
|
|
});
|
|
|
|
test("shared Dialog exposes data-dialog-close for Cmd+W / hasOpenAppDialog", () => {
|
|
const dialogSource = readFileSync(new URL("./ui/dialog.tsx", import.meta.url), "utf8");
|
|
assert.match(dialogSource, /data-dialog-close="true"/);
|
|
});
|