| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /** @jsxImportSource @opentui/solid */
- import { testRender } from "@opentui/solid"
- import { onMount } from "solid-js"
- import { ArgsProvider } from "../../../../src/context/args"
- import { KVProvider, useKV } from "../../../../src/context/kv"
- import { ProjectProvider, useProject } from "../../../../src/context/project"
- import { SDKProvider } from "../../../../src/context/sdk"
- import { SyncProvider, useSync } from "../../../../src/context/sync"
- import { PermissionProvider } from "../../../../src/context/permission"
- import { ExitProvider } from "../../../../src/context/exit"
- import { createEventSource, createFetch, type FetchHandler, directory } from "../../../fixture/tui-sdk"
- import { TestTuiContexts } from "../../../fixture/tui-environment"
- export { createEventSource, createFetch, directory, eventSource, json, worktree } from "../../../fixture/tui-sdk"
- export async function wait(fn: () => boolean, timeout = 2000) {
- const start = Date.now()
- while (!fn()) {
- if (Date.now() - start > timeout) throw new Error("timed out waiting for condition")
- await Bun.sleep(10)
- }
- }
- type Ctx = { kv: ReturnType<typeof useKV>; project: ReturnType<typeof useProject>; sync: ReturnType<typeof useSync> }
- export async function mount(override?: FetchHandler, state?: string) {
- const calls = createFetch(override)
- const events = createEventSource()
- let sync!: ReturnType<typeof useSync>
- let project!: ReturnType<typeof useProject>
- let kv!: ReturnType<typeof useKV>
- let done!: () => void
- const ready = new Promise<void>((resolve) => {
- done = resolve
- })
- function Probe() {
- const ctx: Ctx = { kv: useKV(), project: useProject(), sync: useSync() }
- onMount(() => {
- sync = ctx.sync
- project = ctx.project
- kv = ctx.kv
- done()
- })
- return <box />
- }
- const app = await testRender(() => (
- <TestTuiContexts paths={state ? { state } : undefined}>
- <ArgsProvider>
- <KVProvider>
- <SDKProvider url="http://test" directory={directory} fetch={calls.fetch} events={events.source}>
- <PermissionProvider>
- <ProjectProvider>
- <ExitProvider exit={() => {}}>
- <SyncProvider>
- <Probe />
- </SyncProvider>
- </ExitProvider>
- </ProjectProvider>
- </PermissionProvider>
- </SDKProvider>
- </KVProvider>
- </ArgsProvider>
- </TestTuiContexts>
- ))
- await ready
- await wait(() => sync.status === "complete")
- return { app, emit: events.emit, kv, project, sync, session: calls.session }
- }
|