mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
feat: vendor permission system source
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { collapsePastedNewlines } from "#src/authority/bracketed-paste";
|
||||
|
||||
/** How the terminal hands a paste to a focused component (pi-tui `terminal.ts`). */
|
||||
function pasteChunk(content: string): string {
|
||||
return `\u001b[200~${content}\u001b[201~`;
|
||||
}
|
||||
|
||||
describe("collapsePastedNewlines", () => {
|
||||
it("collapses a line break into a single space", () => {
|
||||
expect(collapsePastedNewlines(pasteChunk("one\ntwo"))).toBe(
|
||||
pasteChunk("one two"),
|
||||
);
|
||||
});
|
||||
|
||||
it("collapses a CRLF line break into a single space", () => {
|
||||
expect(collapsePastedNewlines(pasteChunk("one\r\ntwo"))).toBe(
|
||||
pasteChunk("one two"),
|
||||
);
|
||||
});
|
||||
|
||||
it("collapses a run of blank lines into a single space", () => {
|
||||
expect(collapsePastedNewlines(pasteChunk("one\n\n\ntwo"))).toBe(
|
||||
pasteChunk("one two"),
|
||||
);
|
||||
});
|
||||
|
||||
it("leaves a single-line paste byte-identical", () => {
|
||||
expect(collapsePastedNewlines(pasteChunk("no line breaks here"))).toBe(
|
||||
pasteChunk("no line breaks here"),
|
||||
);
|
||||
});
|
||||
|
||||
it("leaves the paste markers in place so the editor still sees a paste", () => {
|
||||
const collapsed = collapsePastedNewlines(pasteChunk("a\nb"));
|
||||
expect(collapsed.startsWith("\u001b[200~")).toBe(true);
|
||||
expect(collapsed.endsWith("\u001b[201~")).toBe(true);
|
||||
});
|
||||
|
||||
it("returns ordinary keystroke data unchanged", () => {
|
||||
expect(collapsePastedNewlines("\r")).toBe("\r");
|
||||
expect(collapsePastedNewlines("a")).toBe("a");
|
||||
});
|
||||
|
||||
it("leaves a chunk missing its end marker unchanged", () => {
|
||||
// The terminal never splits a paste across calls, so this shape is not a
|
||||
// paste to interpret; passing it through lets the editor buffer it.
|
||||
expect(collapsePastedNewlines("\u001b[200~one\ntwo")).toBe(
|
||||
"\u001b[200~one\ntwo",
|
||||
);
|
||||
});
|
||||
|
||||
it("collapses only inside the markers, not text typed after the paste", () => {
|
||||
expect(collapsePastedNewlines(`${pasteChunk("a\nb")}c\nd`)).toBe(
|
||||
`${pasteChunk("a b")}c\nd`,
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user