import { assert, describe, it } from "@effect/vitest";import * as Schema from "effect/Schema"; import * as PtyAdapter from "./PtyAdapter.ts"; const isPtySpawnError = Schema.is(PtyAdapter.PtySpawnError); describe("PtySpawnError", () => { it("derives messages from structural context while preserving the full cause chain", () => { const spawnCause = new Error("spawn /bin/zsh ENOENT"); const adapterError = new PtyAdapter.PtySpawnError({ adapter: "node-pty", shell: "/bin/zsh", cause: spawnCause, }); const managerError = new PtyAdapter.PtySpawnError({ adapter: "terminal-manager", attemptedShells: ["/bin/zsh -o nopromptsp", "/bin/bash"], cause: adapterError, }); assert(isPtySpawnError(managerError)); assert.strictEqual( managerError.message, "Failed to spawn PTY process with terminal-manager. Tried shells: /bin/zsh -o nopromptsp, /bin/bash.", ); assert.strictEqual( adapterError.message, "Failed to spawn PTY process '/bin/zsh' with node-pty.", ); assert.strictEqual(managerError.cause, adapterError); assert.strictEqual(adapterError.cause, spawnCause); });});
import { assert, describe, it } from "@effect/vitest";
import * as Schema from "effect/Schema";
import * as PtyAdapter from "./PtyAdapter.ts";
const isPtySpawnError = Schema.is(PtyAdapter.PtySpawnError);
describe("PtySpawnError", () => {
it("derives messages from structural context while preserving the full cause chain", () => {
const spawnCause = new Error("spawn /bin/zsh ENOENT");
const adapterError = new PtyAdapter.PtySpawnError({
adapter: "node-pty",
shell: "/bin/zsh",
cause: spawnCause,
});
const managerError = new PtyAdapter.PtySpawnError({
adapter: "terminal-manager",
attemptedShells: ["/bin/zsh -o nopromptsp", "/bin/bash"],
cause: adapterError,
});
assert(isPtySpawnError(managerError));
assert.strictEqual(
managerError.message,
"Failed to spawn PTY process with terminal-manager. Tried shells: /bin/zsh -o nopromptsp, /bin/bash.",
);
assert.strictEqual(
adapterError.message,
"Failed to spawn PTY process '/bin/zsh' with node-pty.",
);
assert.strictEqual(managerError.cause, adapterError);
assert.strictEqual(adapterError.cause, spawnCause);
});
});