44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
/** @jsxImportSource @opentui/solid */
|
|
import { expect, test } from "bun:test"
|
|
import { RGBA } from "@opentui/core"
|
|
import { testRender } from "@opentui/solid"
|
|
import type { Context } from "@opencode-ai/plugin/tui/context"
|
|
import { PromptFooter } from "../../src/feature-plugins/prompt/footer"
|
|
|
|
test("prompt footer separates simultaneous subagent, shell, and usage status", async () => {
|
|
const color = RGBA.fromInts(200, 200, 200)
|
|
const context = {
|
|
location: { directory: "/workspace" },
|
|
theme: { text: { default: color, subdued: color } },
|
|
keymap: {
|
|
shortcuts: (id: string) => (id === "session.child.first" ? ["ctrl+j"] : id === "command.palette.show" ? ["ctrl+p"] : []),
|
|
},
|
|
data: {
|
|
session: {
|
|
family: () => ["session", "child"],
|
|
status: (id: string) => (id === "child" ? "running" : "idle"),
|
|
get: () => ({ id: "session", location: { directory: "/workspace" } }),
|
|
cost: () => 1,
|
|
message: { list: () => [] },
|
|
},
|
|
shell: {
|
|
list: () => [{ metadata: { sessionID: "session" } }],
|
|
},
|
|
location: {
|
|
model: { list: () => [] },
|
|
},
|
|
},
|
|
} as unknown as Context
|
|
const app = await testRender(() => <PromptFooter context={context} sessionID="session" mode="normal" />, {
|
|
width: 80,
|
|
height: 2,
|
|
})
|
|
|
|
try {
|
|
await app.renderOnce()
|
|
expect(app.captureCharFrame()).toContain("ctrl+j 1 subagent · 1 shell · $1.00")
|
|
expect(app.captureCharFrame()).toContain("ctrl+p commands")
|
|
} finally {
|
|
app.renderer.destroy()
|
|
}
|
|
})
|