F3 SLICE-5 review fixes: fence-aware replacement extraction + editSelection guards (#6)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ben Stull
2026-06-10 10:35:16 -07:00
parent 258d1fa914
commit fe23ffa100
5 changed files with 41 additions and 11 deletions
+12 -4
View File
@@ -3,16 +3,24 @@ import { extractReplacement } from "../src/liveTurn";
describe("extractReplacement", () => {
it("returns plain text untouched", () => {
expect(extractReplacement("Hello world.")).toBe("Hello world.");
expect(extractReplacement("Hello world.", "x")).toBe("Hello world.");
});
it("strips a wrapping fence", () => {
expect(extractReplacement("```\nHello world.\n```")).toBe("Hello world.");
expect(extractReplacement("```\nHello world.\n```", "x")).toBe("Hello world.");
});
it("strips a language-tagged fence", () => {
expect(extractReplacement("```markdown\nHello.\n```\n")).toBe("Hello.");
expect(extractReplacement("```markdown\nHello.\n```\n", "x")).toBe("Hello.");
});
it("leaves inner fences alone", () => {
const inner = "before\n```js\ncode\n```\nafter";
expect(extractReplacement(inner)).toBe(inner);
expect(extractReplacement(inner, "x")).toBe(inner);
});
it("keeps the fence when the original selection was itself fence-wrapped", () => {
const sel = "```python\nold()\n```";
const out = "```python\nnew()\n```";
expect(extractReplacement(out, sel)).toBe(out);
});
it("still strips when the selection was plain but the model added a fence", () => {
expect(extractReplacement("```\nplain\n```", "plain old text")).toBe("plain");
});
});