| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /** @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()
- }
- })
|