summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/addons/serialize.test.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-04 23:16:11 -0600
committerAdam <[email protected]>2026-01-05 13:21:31 -0600
commitcdbb009ab04f702c78b11d2d8338cb5ee3b685da (patch)
tree9f731096175ca398e517bbdcf9eeb9a4a0dbcff8 /packages/app/src/addons/serialize.test.ts
parent001b48635602470ab1bac21b6af9fe207ccd5a17 (diff)
downloadopencode-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.ts47
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)