Files
dev/third_party/pi/packages/coding-agent/test/custom-editor-history-keybindings.test.ts
alexion 4def357d09 chore(vendor): import pi 0.85.1
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
2026-09-14 10:48:47 -04:00

35 lines
1.3 KiB
TypeScript

import { setKeybindings, TuiMainScreen } from "@earendil-works/pi-tui";
import { afterEach, describe, expect, it } from "vitest";
import { defaultEditorTheme } from "../../tui/test/test-themes.ts";
import { VirtualTerminal } from "../../tui/test/virtual-terminal.ts";
import { KeybindingsManager } from "../src/core/keybindings.ts";
import { CustomEditor } from "../src/modes/interactive/components/custom-editor.ts";
afterEach(() => {
setKeybindings(new KeybindingsManager());
});
describe("CustomEditor prompt history keybindings", () => {
it("gives an explicit history binding precedence over model cycling", () => {
const keybindings = new KeybindingsManager({
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n",
});
setKeybindings(keybindings);
const editor = new CustomEditor(new TuiMainScreen(new VirtualTerminal()), defaultEditorTheme, keybindings);
let modelCycles = 0;
editor.onAction("app.model.cycleForward", () => {
modelCycles++;
});
editor.addToHistory("previous prompt");
editor.setText("draft");
editor.handleInput("\x10"); // Ctrl+P
expect(editor.getText()).toBe("previous prompt");
expect(modelCycles).toBe(0);
editor.handleInput("\x0e"); // Ctrl+N
expect(editor.getText()).toBe("draft");
});
});