summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/testing/prompt.ts
diff options
context:
space:
mode:
authorLuke Parker <[email protected]>2026-03-17 12:55:58 +1000
committerGitHub <[email protected]>2026-03-17 12:55:58 +1000
commite416e59ea69f7600acbdb593ba68ac0fb1ee2633 (patch)
treef1594d949fc3ad0d37f871e3d1028fcc77674035 /packages/app/src/testing/prompt.ts
parentcb69501098c603ccd7d3e3dbe6655d401c1d815c (diff)
downloadopencode-e416e59ea69f7600acbdb593ba68ac0fb1ee2633.tar.gz
opencode-e416e59ea69f7600acbdb593ba68ac0fb1ee2633.zip
test(app): deflake slash terminal toggle flow (#17881)
Diffstat (limited to 'packages/app/src/testing/prompt.ts')
-rw-r--r--packages/app/src/testing/prompt.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/app/src/testing/prompt.ts b/packages/app/src/testing/prompt.ts
new file mode 100644
index 000000000..e11462f30
--- /dev/null
+++ b/packages/app/src/testing/prompt.ts
@@ -0,0 +1,56 @@
+import type { E2EWindow } from "./terminal"
+
+export type PromptProbeState = {
+ popover: "at" | "slash" | null
+ slash: {
+ active: string | null
+ ids: string[]
+ }
+ selected: string | null
+ selects: number
+}
+
+export const promptEnabled = () => {
+ if (typeof window === "undefined") return false
+ return (window as E2EWindow).__opencode_e2e?.prompt?.enabled === true
+}
+
+const root = () => {
+ if (!promptEnabled()) return
+ return (window as E2EWindow).__opencode_e2e?.prompt
+}
+
+export const promptProbe = {
+ set(input: Omit<PromptProbeState, "selected" | "selects">) {
+ const state = root()
+ if (!state) return
+ state.current = {
+ popover: input.popover,
+ slash: {
+ active: input.slash.active,
+ ids: [...input.slash.ids],
+ },
+ selected: state.current?.selected ?? null,
+ selects: state.current?.selects ?? 0,
+ }
+ },
+ select(id: string) {
+ const state = root()
+ if (!state) return
+ const prev = state.current
+ state.current = {
+ popover: prev?.popover ?? null,
+ slash: {
+ active: prev?.slash.active ?? null,
+ ids: [...(prev?.slash.ids ?? [])],
+ },
+ selected: id,
+ selects: (prev?.selects ?? 0) + 1,
+ }
+ },
+ clear() {
+ const state = root()
+ if (!state) return
+ state.current = undefined
+ },
+}