test(hashline-edit): cover concise responses and anchor alias normalization
Update expectations to the new pi-style response contract and add cases for one-anchor replace_lines fallback plus after_line alias handling. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
86671ad25c
commit
05c04838f4
@ -48,9 +48,7 @@ describe("createHashlineEditTool", () => {
|
|||||||
|
|
||||||
//#then
|
//#then
|
||||||
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\nmodified line2\nline3")
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\nmodified line2\nline3")
|
||||||
expect(result).toContain("Successfully")
|
expect(result).toBe(`Updated ${filePath}`)
|
||||||
expect(result).toContain("Updated file (LINE#ID:content)")
|
|
||||||
expect(result).toMatch(/2#[ZPMQVRWSNKTXJBYH]{2}:modified line2/)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it("applies replace_lines and insert_after", async () => {
|
it("applies replace_lines and insert_after", async () => {
|
||||||
@ -184,7 +182,7 @@ describe("createHashlineEditTool", () => {
|
|||||||
const line2 = computeLineHash(2, "line2")
|
const line2 = computeLineHash(2, "line2")
|
||||||
|
|
||||||
//#when
|
//#when
|
||||||
await tool.execute(
|
const result = await tool.execute(
|
||||||
{
|
{
|
||||||
filePath,
|
filePath,
|
||||||
rename: renamedPath,
|
rename: renamedPath,
|
||||||
@ -196,6 +194,7 @@ describe("createHashlineEditTool", () => {
|
|||||||
//#then
|
//#then
|
||||||
expect(fs.existsSync(filePath)).toBe(false)
|
expect(fs.existsSync(filePath)).toBe(false)
|
||||||
expect(fs.readFileSync(renamedPath, "utf-8")).toBe("line1\nline2-updated")
|
expect(fs.readFileSync(renamedPath, "utf-8")).toBe("line1\nline2-updated")
|
||||||
|
expect(result).toBe(`Moved ${filePath} to ${renamedPath}`)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("supports file delete mode", async () => {
|
it("supports file delete mode", async () => {
|
||||||
@ -237,7 +236,46 @@ describe("createHashlineEditTool", () => {
|
|||||||
//#then
|
//#then
|
||||||
expect(fs.existsSync(filePath)).toBe(true)
|
expect(fs.existsSync(filePath)).toBe(true)
|
||||||
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\nline2")
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\nline2")
|
||||||
expect(result).toContain("Successfully applied 2 edit(s)")
|
expect(result).toBe(`Updated ${filePath}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("accepts replace_lines with one anchor and downgrades to set_line", async () => {
|
||||||
|
//#given
|
||||||
|
const filePath = path.join(tempDir, "degrade.txt")
|
||||||
|
fs.writeFileSync(filePath, "line1\nline2\nline3")
|
||||||
|
const line2Hash = computeLineHash(2, "line2")
|
||||||
|
|
||||||
|
//#when
|
||||||
|
const result = await tool.execute(
|
||||||
|
{
|
||||||
|
filePath,
|
||||||
|
edits: [{ type: "replace_lines", start_line: `2#${line2Hash}`, text: ["line2-updated"] }],
|
||||||
|
},
|
||||||
|
createMockContext(),
|
||||||
|
)
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\nline2-updated\nline3")
|
||||||
|
expect(result).toBe(`Updated ${filePath}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("accepts insert_after using after_line alias", async () => {
|
||||||
|
//#given
|
||||||
|
const filePath = path.join(tempDir, "alias.txt")
|
||||||
|
fs.writeFileSync(filePath, "line1\nline2")
|
||||||
|
const line1Hash = computeLineHash(1, "line1")
|
||||||
|
|
||||||
|
//#when
|
||||||
|
await tool.execute(
|
||||||
|
{
|
||||||
|
filePath,
|
||||||
|
edits: [{ type: "insert_after", after_line: `1#${line1Hash}`, text: ["inserted"] }],
|
||||||
|
},
|
||||||
|
createMockContext(),
|
||||||
|
)
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("line1\ninserted\nline2")
|
||||||
})
|
})
|
||||||
|
|
||||||
it("preserves BOM and CRLF through hashline_edit", async () => {
|
it("preserves BOM and CRLF through hashline_edit", async () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user