63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
/** @jsxImportSource @opentui/solid */
|
|
import { testRender } from "@opentui/solid"
|
|
import { expect, test } from "bun:test"
|
|
import { createSignal } from "solid-js"
|
|
import { ConfigProvider } from "../../src/config"
|
|
import { EMPTY_SESSION_TAB_STATUS, SessionTabs, type SessionTabsController } from "../../src/component/session-tabs"
|
|
import { ThemeProvider } from "../../src/context/theme"
|
|
import { emptyThemeSource } from "../fixture/fixture"
|
|
import { TestTuiContexts } from "../fixture/tui-environment"
|
|
import { createTuiResolvedConfig } from "../fixture/tui-runtime"
|
|
|
|
test("releasing a transcript selection over tab controls does not activate them", async () => {
|
|
const [active, setActive] = createSignal("first")
|
|
const [added, setAdded] = createSignal(0)
|
|
const controller = {
|
|
tabs: () => [
|
|
{ sessionID: "first", title: "First" },
|
|
{ sessionID: "second", title: "Second" },
|
|
],
|
|
current: active,
|
|
select: setActive,
|
|
close() {},
|
|
move() {},
|
|
add: () => setAdded((value) => value + 1),
|
|
status: () => EMPTY_SESSION_TAB_STATUS,
|
|
} satisfies SessionTabsController
|
|
const app = await testRender(
|
|
() => (
|
|
<TestTuiContexts>
|
|
<ConfigProvider config={createTuiResolvedConfig({ tabs: { enabled: true } })}>
|
|
<ThemeProvider mode="dark" source={emptyThemeSource}>
|
|
<box flexDirection="column">
|
|
<SessionTabs controller={controller} animations={false} />
|
|
<text>selectable transcript text</text>
|
|
</box>
|
|
</ThemeProvider>
|
|
</ConfigProvider>
|
|
</TestTuiContexts>
|
|
),
|
|
{ width: 60, height: 3 },
|
|
)
|
|
|
|
try {
|
|
app.renderer.start()
|
|
await app.waitForFrame((frame) => frame.includes("Second"))
|
|
await app.mockMouse.pressDown(5, 1)
|
|
await app.mockMouse.release(40, 0)
|
|
expect(active()).toBe("first")
|
|
|
|
await app.mockMouse.click(40, 0)
|
|
expect(active()).toBe("second")
|
|
|
|
await app.mockMouse.pressDown(5, 1)
|
|
await app.mockMouse.release(58, 0)
|
|
expect(added()).toBe(0)
|
|
|
|
await app.mockMouse.click(58, 0)
|
|
expect(added()).toBe(1)
|
|
} finally {
|
|
app.renderer.destroy()
|
|
}
|
|
})
|