-
Notifications
You must be signed in to change notification settings - Fork 65
Expand file tree
/
Copy pathrender-fork-badge.test.ts
More file actions
73 lines (66 loc) · 1.87 KB
/
render-fork-badge.test.ts
File metadata and controls
73 lines (66 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import assert from "node:assert/strict";
import { describe, it } from "node:test";
type RenderSubagentResult = (
result: {
content: Array<{ type: "text"; text: string }>;
details?: {
mode: "single" | "parallel" | "chain" | "management";
context?: "fresh" | "fork";
results: unknown[];
};
},
options: { expanded: boolean },
theme: {
fg(name: string, text: string): string;
bold(text: string): string;
},
) => { render(width: number): string[] };
let renderSubagentResult: RenderSubagentResult | undefined;
let available = true;
try {
({ renderSubagentResult } = await import("./render.ts") as {
renderSubagentResult?: RenderSubagentResult;
});
} catch {
// Skip in plain unit mode where render.ts dependencies are unavailable.
available = false;
}
const theme = {
fg: (_name: string, text: string) => text,
bold: (text: string) => text,
};
describe("renderSubagentResult fork indicator", { skip: !available ? "render.ts not importable" : undefined }, () => {
it("shows [fork] when details are empty but context is fork", () => {
const widget = renderSubagentResult!({
content: [{ type: "text", text: "Async: reviewer [abc123]" }],
details: { mode: "single", context: "fork", results: [] },
}, { expanded: false }, theme);
const text = widget.render(120).join("\n");
assert.match(text, /\[fork\]/);
});
it("shows [fork] on single-result header", () => {
const widget = renderSubagentResult!({
content: [{ type: "text", text: "done" }],
details: {
mode: "single",
context: "fork",
results: [{
agent: "reviewer",
task: "review",
exitCode: 0,
messages: [],
usage: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
cost: 0,
turns: 0,
},
}],
},
}, { expanded: false }, theme);
const text = widget.render(120).join("\n");
assert.match(text, /\[fork\]/);
});
});