diff options
| author | Adam <[email protected]> | 2026-01-04 23:16:11 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-05 13:21:31 -0600 |
| commit | cdbb009ab04f702c78b11d2d8338cb5ee3b685da (patch) | |
| tree | 9f731096175ca398e517bbdcf9eeb9a4a0dbcff8 /packages/app/src/addons/serialize.test.ts | |
| parent | 001b48635602470ab1bac21b6af9fe207ccd5a17 (diff) | |
| download | opencode-cdbb009ab04f702c78b11d2d8338cb5ee3b685da.tar.gz opencode-cdbb009ab04f702c78b11d2d8338cb5ee3b685da.zip | |
fix(app): terminal flakiness
Diffstat (limited to 'packages/app/src/addons/serialize.test.ts')
| -rw-r--r-- | packages/app/src/addons/serialize.test.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/packages/app/src/addons/serialize.test.ts b/packages/app/src/addons/serialize.test.ts index ad165f43f..7f6780557 100644 --- a/packages/app/src/addons/serialize.test.ts +++ b/packages/app/src/addons/serialize.test.ts @@ -242,6 +242,53 @@ describe("SerializeAddon", () => { expect(term2.buffer.active.getLine(2)?.translateToString(true)).toBe("total 42") }) + test("serialized output should restore after Terminal.reset()", async () => { + const { term, addon } = createTerminal() + + const content = [ + "\x1b[1;32m❯\x1b[0m \x1b[34mcd\x1b[0m /some/path", + "\x1b[1;32m❯\x1b[0m \x1b[34mls\x1b[0m -la", + "total 42", + ].join("\r\n") + + await writeAndWait(term, content) + + const serialized = addon.serialize() + + const { term: term2 } = createTerminal() + terminals.push(term2) + term2.reset() + await writeAndWait(term2, serialized) + + expect(term2.buffer.active.getLine(0)?.translateToString(true)).toContain("cd /some/path") + expect(term2.buffer.active.getLine(1)?.translateToString(true)).toContain("ls -la") + expect(term2.buffer.active.getLine(2)?.translateToString(true)).toBe("total 42") + }) + + test("alternate buffer should round-trip without garbage", async () => { + const { term, addon } = createTerminal(20, 5) + + await writeAndWait(term, "normal\r\n") + await writeAndWait(term, "\x1b[?1049h\x1b[HALT") + + expect(term.buffer.active.type).toBe("alternate") + + const serialized = addon.serialize() + + const { term: term2 } = createTerminal(20, 5) + terminals.push(term2) + await writeAndWait(term2, serialized) + + expect(term2.buffer.active.type).toBe("alternate") + + const line = term2.buffer.active.getLine(0) + expect(line?.translateToString(true)).toBe("ALT") + + // Ensure a cell beyond content isn't garbage + const cellCode = line?.getCell(10)?.getCode() + expect(cellCode === 0 || cellCode === 32).toBe(true) + }) + test("serialized output written to new terminal should match original colors", async () => { const { term, addon } = createTerminal(40, 5) |
