66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
|
|
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");
|
||
|
|
});
|
||
|
|
});
|