Files
Triple-C/app/src/components/terminal/trimSelection.test.ts

66 lines
2.1 KiB
TypeScript
Raw Normal View History

import { describe, it, expect } from "vitest";
import { trimSelection } from "./trimSelection";
describe("trimSelection", () => {
it("returns empty string unchanged", () => {
expect(trimSelection("")).toBe("");
});
it("trims leading and trailing whitespace on a single line", () => {
expect(trimSelection(" hello ")).toBe("hello");
});
it("dedents common leading whitespace while preserving inner indent", () => {
const input = " def foo():\n return 1\n";
expect(trimSelection(input)).toBe("def foo():\n return 1");
});
it("strips leading and trailing blank lines", () => {
const input = "\n\n hello\n\n";
expect(trimSelection(input)).toBe("hello");
});
it("preserves interior blank lines", () => {
const input = " line1\n\n line2";
expect(trimSelection(input)).toBe("line1\n\nline2");
});
it("is idempotent on already-clean text", () => {
const clean = "def foo():\n return 1";
expect(trimSelection(clean)).toBe(clean);
expect(trimSelection(trimSelection(clean))).toBe(clean);
});
it("ignores blank lines when computing the common indent", () => {
// The blank line has 0 leading whitespace but shouldn't force minIndent to 0.
const input = " a\n\n b";
expect(trimSelection(input)).toBe("a\n\nb");
});
it("strips trailing whitespace per line", () => {
const input = "alpha \nbeta\t\t\ngamma";
expect(trimSelection(input)).toBe("alpha\nbeta\ngamma");
});
it("handles mixed-width padding (pads to min)", () => {
const input = " one\n two\n three";
// minIndent = 2
expect(trimSelection(input)).toBe(" one\ntwo\n three");
});
it("handles tabs as leading whitespace", () => {
const input = "\tfoo\n\t\tbar";
// minIndent = 1 tab
expect(trimSelection(input)).toBe("foo\n\tbar");
});
it("returns empty when input is only whitespace", () => {
expect(trimSelection(" \n \n")).toBe("");
});
it("leaves a zero-indent line alone (no false dedent)", () => {
const input = "no-indent\n indented";
expect(trimSelection(input)).toBe("no-indent\n indented");
});
});