
























@@ -38,15 +38,37 @@ function createBackgroundSession(id: string, pid?: number) {
3838});
3939}
404041+function requireRecord(value: unknown, label: string): Record<string, unknown> {
42+if (!value || typeof value !== "object") {
43+throw new Error(`expected ${label}`);
44+}
45+return value as Record<string, unknown>;
46+}
47+4148function expectSessionState(sessionId: string, expected: { exited?: boolean }) {
42-expect(getSession(sessionId)).toMatchObject(expected);
49+const session = requireRecord(getSession(sessionId), sessionId);
50+if ("exited" in expected) {
51+expect(session.exited).toBe(expected.exited);
52+}
4353}
44544555function expectFinishedSessionState(
4656sessionId: string,
4757expected: { status?: string; exitSignal?: string | null },
4858) {
49-expect(getFinishedSession(sessionId)).toMatchObject(expected);
59+const session = requireRecord(getFinishedSession(sessionId), sessionId);
60+if ("status" in expected) {
61+expect(session.status).toBe(expected.status);
62+}
63+if ("exitSignal" in expected) {
64+expect(session.exitSignal).toBe(expected.exitSignal);
65+}
66+}
67+68+function expectTextContent(value: unknown, text: string) {
69+const content = requireRecord(value, "tool content");
70+expect(content.type).toBe("text");
71+expect(content.text).toBe(text);
5072}
51735274describe("process tool supervisor cancellation", () => {
@@ -85,10 +107,7 @@ describe("process tool supervisor cancellation", () => {
8510786108expect(supervisorMock.cancel).toHaveBeenCalledWith("sess", "manual-cancel");
87109expectSessionState("sess", { exited: false });
88-expect(result.content[0]).toMatchObject({
89-type: "text",
90-text: "Termination requested for session sess.",
91-});
110+expectTextContent(result.content[0], "Termination requested for session sess.");
92111});
9311294113it("remove drops running session immediately when cancellation is requested", async () => {
@@ -107,10 +126,7 @@ describe("process tool supervisor cancellation", () => {
107126expect(supervisorMock.cancel).toHaveBeenCalledWith("sess", "manual-cancel");
108127expect(getSession("sess")).toBeUndefined();
109128expect(getFinishedSession("sess")).toBeUndefined();
110-expect(result.content[0]).toMatchObject({
111-type: "text",
112-text: "Removed session sess (termination requested).",
113-});
129+expectTextContent(result.content[0], "Removed session sess (termination requested).");
114130});
115131116132it("falls back to process-tree kill when supervisor record is missing", async () => {
@@ -126,10 +142,7 @@ describe("process tool supervisor cancellation", () => {
126142expect(killProcessTreeMock).toHaveBeenCalledWith(4242);
127143expect(getSession("sess-fallback")).toBeUndefined();
128144expectFinishedSessionState("sess-fallback", { status: "failed", exitSignal: "SIGKILL" });
129-expect(result.content[0]).toMatchObject({
130-type: "text",
131-text: "Killed session sess-fallback.",
132-});
145+expectTextContent(result.content[0], "Killed session sess-fallback.");
133146});
134147135148it("fails remove when no supervisor record and no pid is available", async () => {
@@ -144,10 +157,10 @@ describe("process tool supervisor cancellation", () => {
144157145158expect(killProcessTreeMock).not.toHaveBeenCalled();
146159expectSessionState("sess-no-pid", { exited: false });
147-expect(result.details).toMatchObject({ status: "failed" });
148-expect(result.content[0]).toMatchObject({
149-type: "text",
150-text: "Unable to remove session sess-no-pid: no active supervisor run or process id.",
151-});
160+expect(requireRecord(result.details, "result details").status).toBe("failed");
161+expectTextContent(
162+result.content[0],
163+"Unable to remove session sess-no-pid: no active supervisor run or process id.",
164+);
152165});
153166});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。